Remove all references to WandHelper from GuiSpellDisplay and abstract them behind ISpellCastingItem
This commit is contained in:
@@ -15,7 +15,6 @@ import electroblob.wizardry.registry.Spells;
|
|||||||
import electroblob.wizardry.registry.WizardryPotions;
|
import electroblob.wizardry.registry.WizardryPotions;
|
||||||
import electroblob.wizardry.spell.Spell;
|
import electroblob.wizardry.spell.Spell;
|
||||||
import electroblob.wizardry.util.SpellModifiers;
|
import electroblob.wizardry.util.SpellModifiers;
|
||||||
import electroblob.wizardry.util.WandHelper;
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.FontRenderer;
|
import net.minecraft.client.gui.FontRenderer;
|
||||||
import net.minecraft.client.renderer.GlStateManager;
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
@@ -156,7 +155,9 @@ public class GuiSpellDisplay {
|
|||||||
if(Minecraft.getMinecraft().gameSettings.showDebugInfo) return; // Don't show charge meter in the debug screen
|
if(Minecraft.getMinecraft().gameSettings.showDebugInfo) return; // Don't show charge meter in the debug screen
|
||||||
if(Minecraft.getMinecraft().gameSettings.thirdPersonView != 0) return; // Don't show in third person
|
if(Minecraft.getMinecraft().gameSettings.thirdPersonView != 0) return; // Don't show in third person
|
||||||
|
|
||||||
Spell spell = WandHelper.getCurrentSpell(wand);
|
if(!(wand.getItem() instanceof ISpellCastingItem)) throw new IllegalArgumentException("The given stack must contain an ISpellCastingItem!");
|
||||||
|
|
||||||
|
Spell spell = ((ISpellCastingItem)wand.getItem()).getCurrentSpell(wand);
|
||||||
|
|
||||||
int chargeup = spell.getChargeup();
|
int chargeup = spell.getChargeup();
|
||||||
|
|
||||||
@@ -199,6 +200,8 @@ public class GuiSpellDisplay {
|
|||||||
|
|
||||||
if(!Wizardry.settings.showSpellHUD) return;
|
if(!Wizardry.settings.showSpellHUD) return;
|
||||||
|
|
||||||
|
if(!(wand.getItem() instanceof ISpellCastingItem)) throw new IllegalArgumentException("The given stack must contain an ISpellCastingItem!");
|
||||||
|
|
||||||
boolean flipX = Wizardry.settings.spellHUDPosition.flipX;
|
boolean flipX = Wizardry.settings.spellHUDPosition.flipX;
|
||||||
boolean flipY = Wizardry.settings.spellHUDPosition.flipY;
|
boolean flipY = Wizardry.settings.spellHUDPosition.flipY;
|
||||||
|
|
||||||
@@ -245,19 +248,18 @@ public class GuiSpellDisplay {
|
|||||||
y = MathHelper.ceil(y/scale);
|
y = MathHelper.ceil(y/scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Maybe convert this to use ISpellCastingItem
|
Spell spell = ((ISpellCastingItem)wand.getItem()).getCurrentSpell(wand);
|
||||||
Spell spell = WandHelper.getCurrentSpell(wand);
|
int cooldown = ((ISpellCastingItem)wand.getItem()).getCurrentCooldown(wand);
|
||||||
int cooldown = WandHelper.getCurrentCooldown(wand);
|
int maxCooldown = ((ISpellCastingItem)wand.getItem()).getCurrentMaxCooldown(wand);
|
||||||
int maxCooldown = WandHelper.getCurrentMaxCooldown(wand);
|
|
||||||
|
|
||||||
if(textLayer){
|
if(textLayer){
|
||||||
|
|
||||||
float animationProgress = Math.signum(switchTimer) * ((SPELL_SWITCH_TIME - Math.abs(switchTimer) +
|
float animationProgress = Math.signum(switchTimer) * ((SPELL_SWITCH_TIME - Math.abs(switchTimer) +
|
||||||
partialTicks) / SPELL_SWITCH_TIME);
|
partialTicks) / SPELL_SWITCH_TIME);
|
||||||
|
|
||||||
String prevSpellName = getFormattedSpellName(WandHelper.getPreviousSpell(wand), player, WandHelper.getPreviousCooldown(wand));
|
String prevSpellName = getFormattedSpellName(((ISpellCastingItem)wand.getItem()).getPreviousSpell(wand), player, 0);
|
||||||
String spellName = getFormattedSpellName(spell, player, cooldown);
|
String spellName = getFormattedSpellName(spell, player, cooldown);
|
||||||
String nextSpellName = getFormattedSpellName(WandHelper.getNextSpell(wand), player, WandHelper.getNextCooldown(wand));
|
String nextSpellName = getFormattedSpellName(((ISpellCastingItem)wand.getItem()).getNextSpell(wand), player, 0);
|
||||||
|
|
||||||
skin.drawText(x, y, flipX, flipY, prevSpellName, spellName, nextSpellName, animationProgress);
|
skin.drawText(x, y, flipX, flipY, prevSpellName, spellName, nextSpellName, animationProgress);
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import javax.annotation.Nonnull;
|
|||||||
* This interface is used for the following:<br>
|
* This interface is used for the following:<br>
|
||||||
* - General-purpose detection of continuous spell casting (see {@link EntityUtils#isCasting(EntityLivingBase, Spell)})<br>
|
* - General-purpose detection of continuous spell casting (see {@link EntityUtils#isCasting(EntityLivingBase, Spell)})<br>
|
||||||
* - Display of the arcane workbench tooltip (in conjunction with {@link IManaStoringItem})<br>
|
* - Display of the arcane workbench tooltip (in conjunction with {@link IManaStoringItem})<br>
|
||||||
* - Spell HUD visibility<br>
|
* - Supplying information to the spell HUD<br>
|
||||||
* - Spell switching controls (they won't do anything unless the player is holding an {@code ISpellCastingItem})<br>
|
* - Spell switching controls (they won't do anything unless the player is holding an {@code ISpellCastingItem})<br>
|
||||||
* - Artefacts that trigger a player's wands/scrolls to cast spells
|
* - Artefacts that trigger a player's wands/scrolls to cast spells
|
||||||
* @author Electroblob
|
* @author Electroblob
|
||||||
@@ -40,6 +40,28 @@ public interface ISpellCastingItem {
|
|||||||
@Nonnull
|
@Nonnull
|
||||||
Spell getCurrentSpell(ItemStack stack);
|
Spell getCurrentSpell(ItemStack stack);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the spell equipped in the next slot on the given itemstack. The given itemstack will be of this item.
|
||||||
|
* @param stack The itemstack to query.
|
||||||
|
* @return The next spell, or {@link electroblob.wizardry.registry.Spells#none Spells.none} if no spell is equipped
|
||||||
|
* in the next slot. Returns the current spell by default (useful for items with only one spell).
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
default Spell getNextSpell(ItemStack stack){
|
||||||
|
return getCurrentSpell(stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the spell equipped in the previous slot on the given itemstack. The given itemstack will be of this item.
|
||||||
|
* @param stack The itemstack to query.
|
||||||
|
* @return The previous spell, or {@link electroblob.wizardry.registry.Spells#none Spells.none} if no spell is
|
||||||
|
* equipped in the previous slot. Returns the current spell by default (useful for items with only one spell).
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
default Spell getPreviousSpell(ItemStack stack){
|
||||||
|
return getCurrentSpell(stack);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns all the spells currently bound to the given itemstack. The given itemstack will be of this item.
|
* Returns all the spells currently bound to the given itemstack. The given itemstack will be of this item.
|
||||||
* @param stack The itemstack to query.
|
* @param stack The itemstack to query.
|
||||||
@@ -84,6 +106,24 @@ public interface ISpellCastingItem {
|
|||||||
*/
|
*/
|
||||||
boolean showSpellHUD(EntityPlayer player, ItemStack stack);
|
boolean showSpellHUD(EntityPlayer player, ItemStack stack);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the current cooldown to display on the spell HUD for the given itemstack.
|
||||||
|
* @param stack The itemstack to query.
|
||||||
|
* @return The current cooldown for the equipped spell.
|
||||||
|
*/
|
||||||
|
default int getCurrentCooldown(ItemStack stack){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the max cooldown of the current spell to display on the spell HUD for the given itemstack.
|
||||||
|
* @param stack The itemstack to query.
|
||||||
|
* @return The max cooldown for the equipped spell.
|
||||||
|
*/
|
||||||
|
default int getCurrentMaxCooldown(ItemStack stack){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether this item's spells should be displayed in the arcane workbench tooltip. Only called client-side.
|
* Returns whether this item's spells should be displayed in the arcane workbench tooltip. Only called client-side.
|
||||||
* Ignore this method if this item is not an {@link IWorkbenchItem}.
|
* Ignore this method if this item is not an {@link IWorkbenchItem}.
|
||||||
|
|||||||
@@ -107,6 +107,16 @@ public class ItemWand extends Item implements IWorkbenchItem, ISpellCastingItem,
|
|||||||
return WandHelper.getCurrentSpell(stack);
|
return WandHelper.getCurrentSpell(stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Spell getNextSpell(ItemStack stack){
|
||||||
|
return WandHelper.getNextSpell(stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Spell getPreviousSpell(ItemStack stack){
|
||||||
|
return WandHelper.getPreviousSpell(stack);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Spell[] getSpells(ItemStack stack){
|
public Spell[] getSpells(ItemStack stack){
|
||||||
return WandHelper.getSpells(stack);
|
return WandHelper.getSpells(stack);
|
||||||
@@ -127,6 +137,16 @@ public class ItemWand extends Item implements IWorkbenchItem, ISpellCastingItem,
|
|||||||
return WandHelper.selectSpell(stack, index);
|
return WandHelper.selectSpell(stack, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCurrentCooldown(ItemStack stack){
|
||||||
|
return WandHelper.getCurrentCooldown(stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCurrentMaxCooldown(ItemStack stack){
|
||||||
|
return WandHelper.getCurrentMaxCooldown(stack);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean showSpellHUD(EntityPlayer player, ItemStack stack){
|
public boolean showSpellHUD(EntityPlayer player, ItemStack stack){
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Reference in New Issue
Block a user