Switch weapon abilities to the new system

This commit is contained in:
abel1502 2025-05-17 18:37:09 +03:00
parent f1184f8731
commit 634836c549
No known key found for this signature in database
GPG Key ID: 076926596A536338
6 changed files with 7623 additions and 7542 deletions

View File

@ -1,14 +1,21 @@
package com.hbm.handler.ability; package com.hbm.handler.ability;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.util.EnumChatFormatting;
// All abilities available on a given tool // All abilities available on a given tool
public class AvailableAbilities { public class AvailableAbilities {
private HashMap<IBaseAbility, Integer> abilities = new HashMap<IBaseAbility, Integer>(); private HashMap<IBaseAbility, Integer> abilities = new HashMap<IBaseAbility, Integer>();
AvailableAbilities() {} public AvailableAbilities() {}
AvailableAbilities addAbility(IBaseAbility ability, int level) { public AvailableAbilities addAbility(IBaseAbility ability, int level) {
if (level < 0 || level >= ability.levels()) { if (level < 0 || level >= ability.levels()) {
throw new IllegalArgumentException("Illegal level " + level + " for ability " + ability.getName()); throw new IllegalArgumentException("Illegal level " + level + " for ability " + ability.getName());
} }
@ -17,16 +24,61 @@ public class AvailableAbilities {
return this; return this;
} }
AvailableAbilities removeAbility(IBaseAbility ability) { public AvailableAbilities addToolAbilities() {
addAbility(IToolAreaAbility.NONE, 0);
addAbility(IToolHarvestAbility.NONE, 0);
return this;
}
public AvailableAbilities removeAbility(IBaseAbility ability) {
abilities.remove(ability); abilities.remove(ability);
return this; return this;
} }
boolean supportsAbility(IBaseAbility ability) { public boolean supportsAbility(IBaseAbility ability) {
return abilities.containsKey(ability); return abilities.containsKey(ability);
} }
int maxLevel(IBaseAbility ability) { public int maxLevel(IBaseAbility ability) {
return abilities.getOrDefault(ability, -1); return abilities.getOrDefault(ability, -1);
} }
public Map<IBaseAbility, Integer> get() {
return Collections.unmodifiableMap(abilities);
}
public int size() {
return abilities.size();
}
public boolean isEmpty() {
return abilities.isEmpty();
}
@SideOnly(Side.CLIENT)
public void addInformation(List list) {
boolean hasToolAbilities = abilities.keySet().stream().anyMatch(a -> a instanceof IToolAreaAbility || a instanceof IToolHarvestAbility);
if (hasToolAbilities) {
list.add("Abilities: ");
abilities.forEach((ability, level) -> {
list.add(" " + EnumChatFormatting.GOLD + ability.getFullName(level));
});
list.add("Right click to cycle through abilities!");
list.add("Sneak-click to turn ability off!");
list.add("Alt-click to open ability selection GUI!");
}
boolean hasWeaponModifiers = abilities.keySet().stream().anyMatch(a -> a instanceof IWeaponAbility);
if (hasWeaponModifiers) {
list.add("Weapon modifiers: ");
abilities.forEach((ability, level) -> {
list.add(" " + EnumChatFormatting.RED + ability.getFullName(level));
});
}
}
} }

View File

@ -4,7 +4,6 @@ import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.generic.BlockBobble.BobbleType; import com.hbm.blocks.generic.BlockBobble.BobbleType;
import com.hbm.handler.threading.PacketThreading; import com.hbm.handler.threading.PacketThreading;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.items.tool.IItemWithAbility;
import com.hbm.lib.ModDamageSource; import com.hbm.lib.ModDamageSource;
import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.packet.toclient.AuxParticlePacketNT;
import com.hbm.potion.HbmPotion; import com.hbm.potion.HbmPotion;
@ -26,6 +25,7 @@ import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Blocks; import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.init.Items; import net.minecraft.init.Items;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
@ -35,7 +35,8 @@ import net.minecraft.util.DamageSource;
import net.minecraft.world.World; import net.minecraft.world.World;
public interface IWeaponAbility extends IBaseAbility { public interface IWeaponAbility extends IBaseAbility {
public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool); // Note: tool is currently unused in weapon abilities
public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool);
// region handlers // region handlers
public static final IWeaponAbility NONE = new IWeaponAbility() { public static final IWeaponAbility NONE = new IWeaponAbility() {
@ -46,7 +47,7 @@ public interface IWeaponAbility extends IBaseAbility {
} }
@Override @Override
public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) {} public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) {}
}; };
public static final IWeaponAbility RADIATION = new IWeaponAbility() { public static final IWeaponAbility RADIATION = new IWeaponAbility() {
@ -68,7 +69,7 @@ public interface IWeaponAbility extends IBaseAbility {
} }
@Override @Override
public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) {
if(victim instanceof EntityLivingBase) if(victim instanceof EntityLivingBase)
ContaminationUtil.contaminate((EntityLivingBase)victim, HazardType.RADIATION, ContaminationType.CREATIVE, radAtLevel[level]); ContaminationUtil.contaminate((EntityLivingBase)victim, HazardType.RADIATION, ContaminationType.CREATIVE, radAtLevel[level]);
} }
@ -93,7 +94,7 @@ public interface IWeaponAbility extends IBaseAbility {
} }
@Override @Override
public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) {
float amount = amountAtLevel[level]; float amount = amountAtLevel[level];
if(victim instanceof EntityLivingBase) { if(victim instanceof EntityLivingBase) {
@ -125,7 +126,7 @@ public interface IWeaponAbility extends IBaseAbility {
} }
@Override @Override
public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) {
int duration = durationAtLevel[level]; int duration = durationAtLevel[level];
if(victim instanceof EntityLivingBase) { if(victim instanceof EntityLivingBase) {
@ -156,7 +157,7 @@ public interface IWeaponAbility extends IBaseAbility {
} }
@Override @Override
public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) {
int divider = dividerAtLevel[level]; int divider = dividerAtLevel[level];
if(victim instanceof EntityLivingBase) { if(victim instanceof EntityLivingBase) {
@ -198,7 +199,7 @@ public interface IWeaponAbility extends IBaseAbility {
} }
@Override @Override
public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) {
int duration = durationAtLevel[level]; int duration = durationAtLevel[level];
if(victim instanceof EntityLivingBase) { if(victim instanceof EntityLivingBase) {
@ -228,7 +229,7 @@ public interface IWeaponAbility extends IBaseAbility {
} }
@Override @Override
public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) {
if(victim instanceof EntityLivingBase) { if(victim instanceof EntityLivingBase) {
victim.setFire(durationAtLevel[level]); victim.setFire(durationAtLevel[level]);
} }
@ -241,7 +242,7 @@ public interface IWeaponAbility extends IBaseAbility {
return "weapon.ability.chainsaw"; return "weapon.ability.chainsaw";
} }
public final int[] dividerAtLevel = {10, 15}; public final int[] dividerAtLevel = {15, 10};
@Override @Override
public int levels() { public int levels() {
@ -254,7 +255,7 @@ public interface IWeaponAbility extends IBaseAbility {
} }
@Override @Override
public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) {
int divider = dividerAtLevel[level]; int divider = dividerAtLevel[level];
if(victim instanceof EntityLivingBase) { if(victim instanceof EntityLivingBase) {
@ -291,7 +292,7 @@ public interface IWeaponAbility extends IBaseAbility {
} }
@Override @Override
public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) {
if(victim instanceof EntityLivingBase && ((EntityLivingBase) victim).getHealth() <= 0.0F) { if(victim instanceof EntityLivingBase && ((EntityLivingBase) victim).getHealth() <= 0.0F) {
EntityLivingBase living = (EntityLivingBase) victim; EntityLivingBase living = (EntityLivingBase) victim;
@ -332,7 +333,7 @@ public interface IWeaponAbility extends IBaseAbility {
} }
@Override @Override
public void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool) { public void onHit(int level, World world, EntityPlayer player, Entity victim, Item tool) {
if(victim instanceof EntityMob && ((EntityMob) victim).getHealth() <= 0.0F) { if(victim instanceof EntityMob && ((EntityMob) victim).getHealth() <= 0.0F) {
EntityMob mob = (EntityMob) victim; EntityMob mob = (EntityMob) victim;

View File

@ -6,6 +6,10 @@ import java.util.List;
import org.lwjgl.input.Mouse; import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import com.hbm.handler.ability.IBaseAbility;
import com.hbm.handler.ability.IToolAreaAbility;
import com.hbm.handler.ability.IToolHarvestAbility;
import com.hbm.handler.ability.ToolPreset;
import com.hbm.items.tool.ItemToolAbility; import com.hbm.items.tool.ItemToolAbility;
import com.hbm.lib.RefStrings; import com.hbm.lib.RefStrings;
import com.hbm.util.EnumUtil; import com.hbm.util.EnumUtil;
@ -20,337 +24,373 @@ import net.minecraft.util.ResourceLocation;
public class GUIScreenToolAbility extends GuiScreen { public class GUIScreenToolAbility extends GuiScreen {
public static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/tool/gui_tool_ability.png"); public static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/tool/gui_tool_ability.png");
protected int guiLeft; protected int guiLeft;
protected int guiTop; protected int guiTop;
protected int xSize; protected int xSize;
protected int ySize; protected int ySize;
protected int insetWidth; protected int insetWidth;
protected ItemToolAbility toolDef; protected ItemToolAbility toolDef;
protected ItemStack toolStack; protected ItemStack toolStack;
// TODO: Move elsewhere? public static class AbilityInfo {
public static class AbilityInfo { public IBaseAbility ability;
String name; public int textureU, textureV;
int textureU, textureV;
boolean hasLevels; public AbilityInfo(IBaseAbility ability, int textureU, int textureV) {
this.ability = ability;
public AbilityInfo(String name, int textureU, int textureV, boolean hasLevels) { this.textureU = textureU;
this.name = name; this.textureV = textureV;
this.textureU = textureU; }
this.textureV = textureV; }
this.hasLevels = hasLevels;
} public static final List<AbilityInfo> abilitiesArea = new ArrayList<>();
} public static final List<AbilityInfo> abilitiesHarvest = new ArrayList<>();
public static final List<AbilityInfo> abilitiesArea = new ArrayList<>(); static {
public static final List<AbilityInfo> abilitiesHarvest = new ArrayList<>(); abilitiesArea.add(new AbilityInfo(IToolAreaAbility.NONE, 0, 91));
abilitiesArea.add(new AbilityInfo(IToolAreaAbility.RECURSION, 32, 91));
static { abilitiesArea.add(new AbilityInfo(IToolAreaAbility.HAMMER, 64, 91));
abilitiesArea.add(new AbilityInfo(null, 0, 91, false)); abilitiesArea.add(new AbilityInfo(IToolAreaAbility.EXPLOSION, 96, 91));
abilitiesArea.add(new AbilityInfo("tool.ability.recursion", 32, 91, true));
abilitiesArea.add(new AbilityInfo("tool.ability.hammer", 64, 91, true)); abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.NONE, 0, 107));
abilitiesArea.add(new AbilityInfo("tool.ability.explosion", 96, 91, true)); abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.SILK, 32, 107));
abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.LUCK, 64, 107));
abilitiesHarvest.add(new AbilityInfo(null, 0, 107, false)); abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.SMELTER, 96, 107));
abilitiesHarvest.add(new AbilityInfo("tool.ability.silktouch", 32, 107, false)); abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.SHREDDER, 128, 107));
abilitiesHarvest.add(new AbilityInfo("tool.ability.luck", 64, 107, true)); abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.CENTRIFUGE, 160, 107));
abilitiesHarvest.add(new AbilityInfo("tool.ability.smelter", 96, 107, false)); abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.CRYSTALLIZER, 192, 107));
abilitiesHarvest.add(new AbilityInfo("tool.ability.shredder", 128, 107, false)); abilitiesHarvest.add(new AbilityInfo(IToolHarvestAbility.MERCURY, 224, 107));
abilitiesHarvest.add(new AbilityInfo("tool.ability.centrifuge", 160, 107, false)); }
abilitiesHarvest.add(new AbilityInfo("tool.ability.crystallizer", 192, 107, false));
abilitiesHarvest.add(new AbilityInfo("tool.ability.mercury", 224, 107, false)); // TODO: availability status for abilities; list of presets; selected preset index;
} // TODO: Remove this in favor of current preset
int selectionIdxArea = 0;
// TODO: availability status for abilities; list of presets; selected preset index; int selectedLevelArea = 0;
// TODO: Remove this in favor of current preset int selectionIdxHarvest = 0;
int selectionIdxArea = 0; int selectedLevelHarvest = 0;
int selectedLevelArea = 0; int selectedPreset = 0;
int selectionIdxHarvest = 0; int totalPresets = 1;
int selectedLevelHarvest = 0;
int selectedPreset = 0; int hoverIdxArea = -1;
int totalPresets = 1; int hoverIdxHarvest = -1;
String selectedPresetName = "lorem ipsum"; int hoverIdxExtraBtn = -1;
public GUIScreenToolAbility(ItemToolAbility toolDef) { public GUIScreenToolAbility(ItemToolAbility toolDef) {
super(); super();
this.toolDef = toolDef; this.toolDef = toolDef;
this.xSize = 186; // Note: increased dynamically this.xSize = 186; // Note: increased dynamically
this.ySize = 76; this.ySize = 76;
this.insetWidth = 20 * Math.max(abilitiesArea.size() - 4, abilitiesHarvest.size() - 8); this.insetWidth = 20 * Math.max(abilitiesArea.size() - 4, abilitiesHarvest.size() - 8);
this.xSize += insetWidth; this.xSize += insetWidth;
} }
@Override @Override
public void initGui() { public void initGui() {
this.toolStack = this.mc.thePlayer.getHeldItem(); this.toolStack = this.mc.thePlayer.getHeldItem();
if(this.toolStack == null) { if(this.toolStack == null) {
doClose(); doClose();
} }
guiLeft = (width - xSize) / 2; guiLeft = (width - xSize) / 2;
guiTop = (height - ySize) / 2; guiTop = (height - ySize) / 2;
} }
@Override @Override
public void drawScreen(int mouseX, int mouseY, float f) { public void drawScreen(int mouseX, int mouseY, float f) {
this.drawDefaultBackground(); this.drawDefaultBackground();
drawGuiContainerBackgroundLayer(mouseX, mouseY); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
} Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
protected void drawGuiContainerBackgroundLayer(int mouseX, int mouseY) { // Draw window background
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); drawStretchedRect(guiLeft, guiTop, 0, 0, xSize, xSize - insetWidth, ySize, 74, 76);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
// Draw the switches
// Draw window background hoverIdxArea = drawSwitches(abilitiesArea, selectionIdxArea, selectedLevelArea, guiLeft + 15, guiTop + 25, mouseX, mouseY);
drawStretchedRect(guiLeft, guiTop, 0, 0, xSize, xSize - insetWidth, ySize, 74, 76); hoverIdxHarvest = drawSwitches(abilitiesHarvest, selectionIdxHarvest, selectedLevelHarvest, guiLeft + 15, guiTop + 45, mouseX, mouseY);
// Draw the switches // Draw preset indicator
drawSwitches(abilitiesArea, selectionIdxArea, selectedLevelArea, guiLeft + 15, guiTop + 25, mouseX, mouseY); drawNumber(selectedPreset + 1, guiLeft + insetWidth + 115, guiTop + 25);
drawSwitches(abilitiesHarvest, selectionIdxHarvest, selectedLevelHarvest, guiLeft + 15, guiTop + 45, mouseX, mouseY); drawNumber(totalPresets, guiLeft + insetWidth + 149, guiTop + 25);
// Draw preset indicator // Draw extra buttons hover highlights
drawNumber(selectedPreset + 1, guiLeft + insetWidth + 115, guiTop + 25); int extraBtnsX = guiLeft + xSize - 86;
drawNumber(totalPresets, guiLeft + insetWidth + 149, guiTop + 25);
hoverIdxExtraBtn = -1;
// Draw extra buttons hover highlights for (int i = 0; i < 7; ++i) {
int extraBtnsX = guiLeft + xSize - 75; if (isInAABB(mouseX, mouseY, extraBtnsX + i * 11, guiTop + 11, 9, 9)) {
hoverIdxExtraBtn = i;
for (int i = 0; i < 6; ++i) { drawTexturedModalRect(extraBtnsX + i * 11, guiTop + 11, 193 + i * 9, 0, 9, 9);
if (isInAABB(mouseX, mouseY, extraBtnsX + i * 11, guiTop + 11, 9, 9)) { }
drawTexturedModalRect(extraBtnsX + i * 11, guiTop + 11, 186 + i * 9, 18, 9, 9); }
}
} // Draw tooltip
String tooltipValue = "";
// Draw tooltip
if (!"".equals(selectedPresetName)) { if (hoverIdxArea != -1) {
int tooltipWidth = Math.max(6, fontRendererObj.getStringWidth(selectedPresetName)); int level = 0;
int tooltipX = guiLeft + xSize / 2 - tooltipWidth / 2; if (hoverIdxArea == selectionIdxArea) {
int tooltipY = guiTop + ySize + 1 + 4; level = selectedLevelArea;
drawStretchedRect(tooltipX - 5, tooltipY - 4, 0, 76, tooltipWidth + 10, 186, 15, 3, 3); }
fontRendererObj.drawString(selectedPresetName, tooltipX, tooltipY, 0xffffffff); tooltipValue = abilitiesArea.get(hoverIdxArea).ability.getFullName(level);
} } else if (hoverIdxHarvest != -1) {
} int level = 0;
if (hoverIdxHarvest == selectionIdxHarvest) {
protected void drawStretchedRect(int x, int y, int u, int v, int realWidth, int width, int height, int keepLeft, int keepRight) { level = selectedLevelHarvest;
int midWidth = width - keepLeft - keepRight; }
int realMidWidth = realWidth - keepLeft - keepRight; tooltipValue = abilitiesHarvest.get(hoverIdxHarvest).ability.getFullName(level);
drawTexturedModalRect(x, y, u, v, keepLeft, height); } else if (hoverIdxExtraBtn != -1) {
for (int i = 0; i < realMidWidth; i += midWidth) { switch (hoverIdxExtraBtn) {
drawTexturedModalRect(x + keepLeft + i, y, u + keepLeft, v, Math.min(midWidth, realMidWidth - i), height); case 0: tooltipValue = "Reset all presets"; break;
} case 1: tooltipValue = "Delete current preset"; break;
drawTexturedModalRect(x + keepLeft + realMidWidth, y, u + keepLeft + midWidth, v, keepRight, height); case 2: tooltipValue = "Add new preset"; break;
} case 3: tooltipValue = "Select first preset"; break;
case 4: tooltipValue = "Next preset"; break;
protected void drawSwitches(List<AbilityInfo> abilities, int selectionIdx, int selectedLevel, int x, int y, int mouseX, int mouseY) { case 5: tooltipValue = "Previous preset"; break;
// TODO: Store hovered ability, use it in click handling and the dynamic tooltip case 6: tooltipValue = "Close window"; break;
}
for (int i = 0; i < abilities.size(); ++i) { }
AbilityInfo abilityInfo = abilities.get(i);
boolean available = true; // TODO if (!tooltipValue.isEmpty()) {
int tooltipWidth = Math.max(6, fontRendererObj.getStringWidth(tooltipValue));
// Draw switch int tooltipX = guiLeft + xSize / 2 - tooltipWidth / 2;
drawTexturedModalRect(x + 20 * i, y, abilityInfo.textureU + (available ? 16 : 0), abilityInfo.textureV, 16, 16); int tooltipY = guiTop + ySize + 1 + 4;
drawStretchedRect(tooltipX - 5, tooltipY - 4, 0, 76, tooltipWidth + 10, 186, 15, 3, 3);
// Draw level LEDs fontRendererObj.drawString(tooltipValue, tooltipX, tooltipY, 0xffffffff);
if (abilityInfo.hasLevels) { }
int level = 0; // TODO }
if (i == selectionIdx) { protected void drawStretchedRect(int x, int y, int u, int v, int realWidth, int width, int height, int keepLeft, int keepRight) {
level = selectedLevel + 1; int midWidth = width - keepLeft - keepRight;
} int realMidWidth = realWidth - keepLeft - keepRight;
drawTexturedModalRect(x, y, u, v, keepLeft, height);
drawTexturedModalRect(x + 20 * i + 17, y + 1, 222 + level * 2, 0, 2, 14); for (int i = 0; i < realMidWidth; i += midWidth) {
} drawTexturedModalRect(x + keepLeft + i, y, u + keepLeft, v, Math.min(midWidth, realMidWidth - i), height);
}
if (i == selectionIdx) { drawTexturedModalRect(x + keepLeft + realMidWidth, y, u + keepLeft + midWidth, v, keepRight, height);
// Draw selection highlight }
drawTexturedModalRect(x + 20 * i - 1, y - 1, 186, 0, 18, 18);
} else if (available && isInAABB(mouseX, mouseY, x + 20 * i, y, 16, 16)) { protected int drawSwitches(List<AbilityInfo> abilities, int selectionIdx, int selectedLevel, int x, int y, int mouseX, int mouseY) {
// Draw hover highlight int hoverIdx = -1;
drawTexturedModalRect(x + 20 * i - 1, y - 1, 204, 0, 18, 18);
} for (int i = 0; i < abilities.size(); ++i) {
} AbilityInfo abilityInfo = abilities.get(i);
} boolean available = true; // TODO
protected void drawNumber(int number, int x, int y) { // Draw switch
number += 100; // Against accidental negatives drawTexturedModalRect(x + 20 * i, y, abilityInfo.textureU + (available ? 16 : 0), abilityInfo.textureV, 16, 16);
drawDigit((number / 10) % 10, x, y);
drawDigit(number % 10, x + 12, y); // Draw level LEDs
} if (abilityInfo.ability.levels() > 1) {
int level = 0;
protected void drawDigit(int digit, int x, int y) {
drawTexturedModalRect(x, y, digit * 10, 123, 10, 15); if (i == selectionIdx) {
} level = selectedLevel + 1;
}
private boolean isInAABB(int mouseX, int mouseY, int x, int y, int width, int height) {
return x <= mouseX && x + width > mouseX && y <= mouseY && y + height > mouseY; // TODO: Max allowed level instead?
} // int maxLevel = Math.min(abilityInfo.ability.levels(), 5);
int maxLevel = 5;
@Override
public void updateScreen() { if (level > 10 || level < 0) {
EntityPlayer player = this.mc.thePlayer; // All-red LEDs for invalid levels
level = -1;
if(player.getHeldItem() == null || player.getHeldItem().getItem() != toolDef) }
player.closeScreen();
} drawTexturedModalRect(x + 20 * i + 17, y + 1, 188 + level * 2, maxLevel * 14, 2, 14);
}
@Override
public void handleMouseInput() { boolean isHovered = isInAABB(mouseX, mouseY, x + 20 * i, y, 16, 16);
super.handleMouseInput();
if (isHovered) {
if(Mouse.getEventButton() == -1) { hoverIdx = i;
int scroll = Mouse.getEventDWheel(); }
if(scroll > 0 && selectedPreset > 0) selectedPreset -= 1; if (i == selectionIdx) {
if(scroll < 0 && selectedPreset < totalPresets) selectedPreset += 1; // Draw selection highlight
} drawTexturedModalRect(x + 20 * i - 1, y - 1, 220, 9, 18, 18);
} } else if (available && isHovered) {
// Draw hover highlight
@Override drawTexturedModalRect(x + 20 * i - 1, y - 1, 238, 9, 18, 18);
protected void mouseClicked(int mouseX, int mouseY, int button) { }
// TODO }
boolean clicked = false;
return hoverIdx;
// TODO: Encapsulate? }
for (int i = 0; i < abilitiesArea.size(); ++i) {
AbilityInfo abilityInfo = abilitiesArea.get(i); protected void drawNumber(int number, int x, int y) {
boolean available = true; // TODO number += 100; // Against accidental negatives
drawDigit((number / 10) % 10, x, y);
if (available && isInAABB(mouseX, mouseY, guiLeft + 15 + 20 * i, guiTop + 25, 16, 16)) { drawDigit(number % 10, x + 12, y);
if (abilityInfo.hasLevels) { }
int availableLevels = 10;
protected void drawDigit(int digit, int x, int y) {
if (i == selectionIdxArea) { drawTexturedModalRect(x, y, digit * 10, 123, 10, 15);
selectedLevelArea = (selectedLevelArea + 1) % availableLevels; }
} else {
selectedLevelArea = 0; private boolean isInAABB(int mouseX, int mouseY, int x, int y, int width, int height) {
} return x <= mouseX && x + width > mouseX && y <= mouseY && y + height > mouseY;
} }
selectionIdxArea = i; @Override
clicked = true; public void updateScreen() {
break; EntityPlayer player = this.mc.thePlayer;
}
} if(player.getHeldItem() == null || player.getHeldItem().getItem() != toolDef)
player.closeScreen();
for (int i = 0; i < abilitiesHarvest.size(); ++i) { }
AbilityInfo abilityInfo = abilitiesHarvest.get(i);
boolean available = true; // TODO @Override
public void handleMouseInput() {
if (available && isInAABB(mouseX, mouseY, guiLeft + 15 + 20 * i, guiTop + 45, 16, 16)) { super.handleMouseInput();
if (abilityInfo.hasLevels) {
int availableLevels = 11; if(Mouse.getEventButton() == -1) {
int scroll = Mouse.getEventDWheel();
if (i == selectionIdxHarvest) {
selectedLevelHarvest = (selectedLevelHarvest + 1) % availableLevels; if(scroll < 0 && selectedPreset > 0) selectedPreset -= 1;
} else { if(scroll > 0 && selectedPreset < totalPresets - 1) selectedPreset += 1;
selectedLevelHarvest = 0; }
} }
}
@Override
selectionIdxHarvest = i; protected void mouseClicked(int mouseX, int mouseY, int button) {
clicked = true; // Process switches
break; // TODO: Encapsulate in a method
} if (hoverIdxArea != -1) {
} boolean available = true; // TODO
if (clicked) { if (available) {
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:item.techBoop"), 2F)); int availableLevels = abilitiesArea.get(hoverIdxArea).ability.levels();
}
if (hoverIdxArea != selectionIdxArea || availableLevels > 1) {
// TODO mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:item.techBoop"), 2F));
int extraBtnsX = guiLeft + xSize - 75; }
clicked = false; if (hoverIdxArea == selectionIdxArea) {
selectedLevelArea = (selectedLevelArea + 1) % availableLevels;
if (isInAABB(mouseX, mouseY, extraBtnsX + 0 * 11, guiTop + 11, 9, 9)) { } else {
doDelPreset(); selectedLevelArea = 0;
clicked = true; }
}
selectionIdxArea = hoverIdxArea;
if (isInAABB(mouseX, mouseY, extraBtnsX + 1 * 11, guiTop + 11, 9, 9)) { }
doAddPreset(); }
clicked = true;
} if (hoverIdxHarvest != -1) {
boolean available = true; // TODO
if (isInAABB(mouseX, mouseY, extraBtnsX + 2 * 11, guiTop + 11, 9, 9)) {
doZeroPreset(); if (available) {
clicked = true; int availableLevels = abilitiesHarvest.get(hoverIdxHarvest).ability.levels();
}
if (hoverIdxHarvest == selectionIdxHarvest) {
if (isInAABB(mouseX, mouseY, extraBtnsX + 3 * 11, guiTop + 11, 9, 9)) { selectedLevelHarvest = (selectedLevelHarvest + 1) % availableLevels;
doNextPreset(); } else {
clicked = true; selectedLevelHarvest = 0;
} }
if (isInAABB(mouseX, mouseY, extraBtnsX + 4 * 11, guiTop + 11, 9, 9)) { selectionIdxHarvest = hoverIdxHarvest;
doPrevPreset();
clicked = true; mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:item.techBoop"), 2F));
} }
}
if (isInAABB(mouseX, mouseY, extraBtnsX + 5 * 11, guiTop + 11, 9, 9)) {
doClose(); // Process extra buttons
clicked = true; if (hoverIdxExtraBtn != -1) {
} switch (hoverIdxExtraBtn) {
case 0:
if (clicked) { doResetPresets();
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 0.5F)); break;
} case 1:
} doDelPreset();
break;
@Override case 2:
protected void keyTyped(char c, int key) { doAddPreset();
if(key == 1 || key == this.mc.gameSettings.keyBindInventory.getKeyCode()) { break;
doClose(); case 3:
return; doZeroPreset();
} break;
case 4:
super.keyTyped(c, key); doNextPreset();
} break;
case 5:
@Override doPrevPreset();
public boolean doesGuiPauseGame() { break;
return false; case 6:
} doClose();
break;
protected void doDelPreset() { }
// TODO
if (totalPresets <= 1) { mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 0.5F));
return; }
}
totalPresets -= 1; // Allow quick-closing
selectedPreset -= 1; if (!isInAABB(mouseX, mouseY, guiLeft, guiTop, xSize, ySize)) {
} doClose();
}
protected void doAddPreset() { }
// TODO
totalPresets += 1; @Override
selectedPreset += 1; protected void keyTyped(char c, int key) {
} if(key == 1 || key == this.mc.gameSettings.keyBindInventory.getKeyCode()) {
doClose();
protected void doZeroPreset() { return;
// TODO }
selectedPreset = 0;
} super.keyTyped(c, key);
}
protected void doNextPreset() {
// TODO @Override
selectedPreset = (selectedPreset + 1) % totalPresets; public boolean doesGuiPauseGame() {
} return false;
}
protected void doPrevPreset() {
// TODO protected void doResetPresets() {
selectedPreset = (selectedPreset + totalPresets - 1) % totalPresets; // TODO
} totalPresets = 1;
selectedPreset = 0;
protected void doClose() { selectionIdxArea = 0;
this.mc.thePlayer.closeScreen(); selectedLevelArea = 0;
} selectionIdxHarvest = 0;
selectedLevelHarvest = 0;
}
protected void doDelPreset() {
// TODO
if (totalPresets <= 1) {
return;
}
totalPresets -= 1;
selectedPreset -= 1;
}
protected void doAddPreset() {
// TODO
totalPresets += 1;
selectedPreset += 1;
}
protected void doZeroPreset() {
// TODO
selectedPreset = 0;
}
protected void doNextPreset() {
// TODO
selectedPreset = (selectedPreset + 1) % totalPresets;
}
protected void doPrevPreset() {
// TODO
selectedPreset = (selectedPreset + totalPresets - 1) % totalPresets;
}
protected void doClose() {
this.mc.thePlayer.closeScreen();
}
} }

View File

@ -5,6 +5,7 @@ import com.hbm.config.VersatileConfig;
import com.hbm.handler.BucketHandler; import com.hbm.handler.BucketHandler;
import com.hbm.handler.ToolAbility; import com.hbm.handler.ToolAbility;
import com.hbm.handler.ToolAbility.LuckAbility; import com.hbm.handler.ToolAbility.LuckAbility;
import com.hbm.handler.ability.IWeaponAbility;
import com.hbm.handler.WeaponAbility; import com.hbm.handler.WeaponAbility;
import com.hbm.handler.guncfg.*; import com.hbm.handler.guncfg.*;
import com.hbm.interfaces.ICustomWarhead.SaltedFuel.HalfLifeType; import com.hbm.interfaces.ICustomWarhead.SaltedFuel.HalfLifeType;
@ -4480,8 +4481,8 @@ public class ModItems {
.addHitAbility(new WeaponAbility.BeheaderAbility()).setShears().setUnlocalizedName("chainsaw").setTextureName(RefStrings.MODID + ":chainsaw"); .addHitAbility(new WeaponAbility.BeheaderAbility()).setShears().setUnlocalizedName("chainsaw").setTextureName(RefStrings.MODID + ":chainsaw");
schrabidium_sword = new ItemSwordAbility(75, 0, MainRegistry.tMatSchrab) schrabidium_sword = new ItemSwordAbility(75, 0, MainRegistry.tMatSchrab)
.addHitAbility(new WeaponAbility.RadiationAbility(50F)) .addHitAbility(IWeaponAbility.RADIATION, 1)
.addHitAbility(new WeaponAbility.VampireAbility(2F)) .addHitAbility(IWeaponAbility.VAMPIRE, 0)
.setRarity(EnumRarity.rare).setUnlocalizedName("schrabidium_sword").setTextureName(RefStrings.MODID + ":schrabidium_sword"); .setRarity(EnumRarity.rare).setUnlocalizedName("schrabidium_sword").setTextureName(RefStrings.MODID + ":schrabidium_sword");
schrabidium_pickaxe = new ItemToolAbility(20, 0, MainRegistry.tMatSchrab, EnumToolType.PICKAXE) schrabidium_pickaxe = new ItemToolAbility(20, 0, MainRegistry.tMatSchrab, EnumToolType.PICKAXE)
@ -4531,7 +4532,7 @@ public class ModItems {
steel_hoe = new ModHoe(MainRegistry.tMatSteel).setUnlocalizedName("steel_hoe").setTextureName(RefStrings.MODID + ":steel_hoe"); steel_hoe = new ModHoe(MainRegistry.tMatSteel).setUnlocalizedName("steel_hoe").setTextureName(RefStrings.MODID + ":steel_hoe");
alloy_sword = new ItemSwordAbility(8F, 0, MainRegistry.tMatAlloy) alloy_sword = new ItemSwordAbility(8F, 0, MainRegistry.tMatAlloy)
.addHitAbility(new WeaponAbility.StunAbility(2)).setUnlocalizedName("alloy_sword").setTextureName(RefStrings.MODID + ":alloy_sword"); .addHitAbility(IWeaponAbility.STUN, 0).setUnlocalizedName("alloy_sword").setTextureName(RefStrings.MODID + ":alloy_sword");
alloy_pickaxe = new ItemToolAbility(5F, 0, MainRegistry.tMatAlloy, EnumToolType.PICKAXE) alloy_pickaxe = new ItemToolAbility(5F, 0, MainRegistry.tMatAlloy, EnumToolType.PICKAXE)
.addBreakAbility(new ToolAbility.RecursionAbility(3)).setUnlocalizedName("alloy_pickaxe").setTextureName(RefStrings.MODID + ":alloy_pickaxe"); .addBreakAbility(new ToolAbility.RecursionAbility(3)).setUnlocalizedName("alloy_pickaxe").setTextureName(RefStrings.MODID + ":alloy_pickaxe");
@ -4546,8 +4547,8 @@ public class ModItems {
alloy_hoe = new ModHoe(MainRegistry.tMatAlloy).setUnlocalizedName("alloy_hoe").setTextureName(RefStrings.MODID + ":alloy_hoe"); alloy_hoe = new ModHoe(MainRegistry.tMatAlloy).setUnlocalizedName("alloy_hoe").setTextureName(RefStrings.MODID + ":alloy_hoe");
cmb_sword = new ItemSwordAbility(35F, 0, MainRegistry.tMatCMB) cmb_sword = new ItemSwordAbility(35F, 0, MainRegistry.tMatCMB)
.addHitAbility(new WeaponAbility.StunAbility(2)) .addHitAbility(IWeaponAbility.STUN, 0)
.addHitAbility(new WeaponAbility.VampireAbility(2F)).setUnlocalizedName("cmb_sword").setTextureName(RefStrings.MODID + ":cmb_sword"); .addHitAbility(IWeaponAbility.VAMPIRE, 0).setUnlocalizedName("cmb_sword").setTextureName(RefStrings.MODID + ":cmb_sword");
cmb_pickaxe = new ItemToolAbility(10F, 0, MainRegistry.tMatCMB, EnumToolType.PICKAXE) cmb_pickaxe = new ItemToolAbility(10F, 0, MainRegistry.tMatCMB, EnumToolType.PICKAXE)
.addBreakAbility(new ToolAbility.RecursionAbility(5)) .addBreakAbility(new ToolAbility.RecursionAbility(5))
@ -4571,7 +4572,7 @@ public class ModItems {
cmb_hoe = new ModHoe(MainRegistry.tMatCMB).setUnlocalizedName("cmb_hoe").setTextureName(RefStrings.MODID + ":cmb_hoe"); cmb_hoe = new ModHoe(MainRegistry.tMatCMB).setUnlocalizedName("cmb_hoe").setTextureName(RefStrings.MODID + ":cmb_hoe");
elec_sword = new ItemSwordAbilityPower(12.5F, 0, MainRegistry.tMatElec, 500000, 1000, 100) elec_sword = new ItemSwordAbilityPower(12.5F, 0, MainRegistry.tMatElec, 500000, 1000, 100)
.addHitAbility(new WeaponAbility.StunAbility(5)).setUnlocalizedName("elec_sword").setTextureName(RefStrings.MODID + ":elec_sword_anim"); .addHitAbility(IWeaponAbility.STUN, 2).setUnlocalizedName("elec_sword").setTextureName(RefStrings.MODID + ":elec_sword_anim");
elec_pickaxe = new ItemToolAbilityPower(6F, 0, MainRegistry.tMatElec, EnumToolType.PICKAXE, 500000, 1000, 100) elec_pickaxe = new ItemToolAbilityPower(6F, 0, MainRegistry.tMatElec, EnumToolType.PICKAXE, 500000, 1000, 100)
.addBreakAbility(new ToolAbility.HammerAbility(2)) .addBreakAbility(new ToolAbility.HammerAbility(2))
@ -4594,7 +4595,7 @@ public class ModItems {
.addBreakAbility(new LuckAbility(2)).setUnlocalizedName("elec_shovel").setTextureName(RefStrings.MODID + ":elec_shovel_anim"); .addBreakAbility(new LuckAbility(2)).setUnlocalizedName("elec_shovel").setTextureName(RefStrings.MODID + ":elec_shovel_anim");
desh_sword = new ItemSwordAbility(12.5F, 0, MainRegistry.tMatDesh) desh_sword = new ItemSwordAbility(12.5F, 0, MainRegistry.tMatDesh)
.addHitAbility(new WeaponAbility.StunAbility(2)).setUnlocalizedName("desh_sword").setTextureName(RefStrings.MODID + ":desh_sword"); .addHitAbility(IWeaponAbility.STUN, 0).setUnlocalizedName("desh_sword").setTextureName(RefStrings.MODID + ":desh_sword");
desh_pickaxe = new ItemToolAbility(5F, -0.05, MainRegistry.tMatDesh, EnumToolType.PICKAXE) desh_pickaxe = new ItemToolAbility(5F, -0.05, MainRegistry.tMatDesh, EnumToolType.PICKAXE)
.addBreakAbility(new ToolAbility.HammerAbility(1)) .addBreakAbility(new ToolAbility.HammerAbility(1))
@ -4635,7 +4636,7 @@ public class ModItems {
ToolMaterial matDecCobalt = EnumHelper.addToolMaterial("HBM_COBALT2", 3, 2500, 15.0F, 2.5F, 75).setRepairItem(new ItemStack(ModItems.ingot_cobalt)); ToolMaterial matDecCobalt = EnumHelper.addToolMaterial("HBM_COBALT2", 3, 2500, 15.0F, 2.5F, 75).setRepairItem(new ItemStack(ModItems.ingot_cobalt));
cobalt_decorated_sword = new ItemSwordAbility(15F, 0, matDecCobalt) cobalt_decorated_sword = new ItemSwordAbility(15F, 0, matDecCobalt)
.addHitAbility(new WeaponAbility.BobbleAbility()).setUnlocalizedName("cobalt_decorated_sword").setTextureName(RefStrings.MODID + ":cobalt_decorated_sword"); .addHitAbility(IWeaponAbility.BOBBLE, 0).setUnlocalizedName("cobalt_decorated_sword").setTextureName(RefStrings.MODID + ":cobalt_decorated_sword");
cobalt_decorated_pickaxe = new ItemToolAbility(6F, 0, matDecCobalt, EnumToolType.PICKAXE) cobalt_decorated_pickaxe = new ItemToolAbility(6F, 0, matDecCobalt, EnumToolType.PICKAXE)
.addBreakAbility(new ToolAbility.RecursionAbility(4)) .addBreakAbility(new ToolAbility.RecursionAbility(4))
.addBreakAbility(new ToolAbility.HammerAbility(1)) .addBreakAbility(new ToolAbility.HammerAbility(1))
@ -4656,9 +4657,9 @@ public class ModItems {
ToolMaterial matStarmetal = EnumHelper.addToolMaterial("HBM_STARMETAL", 3, 3000, 20.0F, 2.5F, 100).setRepairItem(new ItemStack(ModItems.ingot_starmetal)); ToolMaterial matStarmetal = EnumHelper.addToolMaterial("HBM_STARMETAL", 3, 3000, 20.0F, 2.5F, 100).setRepairItem(new ItemStack(ModItems.ingot_starmetal));
starmetal_sword = new ItemSwordAbility(25F, 0, matStarmetal) starmetal_sword = new ItemSwordAbility(25F, 0, matStarmetal)
.addHitAbility(new WeaponAbility.BeheaderAbility()) .addHitAbility(IWeaponAbility.BEHEADER, 0)
.addHitAbility(new WeaponAbility.StunAbility(3)) .addHitAbility(IWeaponAbility.STUN, 1)
.addHitAbility(new WeaponAbility.BobbleAbility()).setUnlocalizedName("starmetal_sword").setTextureName(RefStrings.MODID + ":starmetal_sword"); .addHitAbility(IWeaponAbility.BOBBLE, 0).setUnlocalizedName("starmetal_sword").setTextureName(RefStrings.MODID + ":starmetal_sword");
starmetal_pickaxe = new ItemToolAbility(8F, 0, matStarmetal, EnumToolType.PICKAXE) starmetal_pickaxe = new ItemToolAbility(8F, 0, matStarmetal, EnumToolType.PICKAXE)
.addBreakAbility(new ToolAbility.RecursionAbility(6)) .addBreakAbility(new ToolAbility.RecursionAbility(6))
.addBreakAbility(new ToolAbility.HammerAbility(2)) .addBreakAbility(new ToolAbility.HammerAbility(2))
@ -4882,11 +4883,11 @@ public class ModItems {
diamond_gavel = new WeaponSpecial(ToolMaterial.EMERALD).setUnlocalizedName("diamond_gavel").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":diamond_gavel"); diamond_gavel = new WeaponSpecial(ToolMaterial.EMERALD).setUnlocalizedName("diamond_gavel").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":diamond_gavel");
ToolMaterial matMeseGavel = EnumHelper.addToolMaterial("HBM_MESEGAVEL", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.plate_paa)); ToolMaterial matMeseGavel = EnumHelper.addToolMaterial("HBM_MESEGAVEL", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.plate_paa));
mese_gavel = new ItemSwordAbility(250, 1.5, matMeseGavel) mese_gavel = new ItemSwordAbility(250, 1.5, matMeseGavel)
.addHitAbility(new WeaponAbility.PhosphorusAbility(60)) .addHitAbility(IWeaponAbility.PHOSPHORUS, 0)
.addHitAbility(new WeaponAbility.RadiationAbility(500)) .addHitAbility(IWeaponAbility.RADIATION, 2)
.addHitAbility(new WeaponAbility.StunAbility(10)) .addHitAbility(IWeaponAbility.STUN, 3)
.addHitAbility(new WeaponAbility.VampireAbility(50)) .addHitAbility(IWeaponAbility.VAMPIRE, 4)
.addHitAbility(new WeaponAbility.BeheaderAbility()).setUnlocalizedName("mese_gavel").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mese_gavel"); .addHitAbility(IWeaponAbility.BEHEADER, 0).setUnlocalizedName("mese_gavel").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mese_gavel");
multitool_hit = new ItemMultitoolPassive().setUnlocalizedName("multitool_hit").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_fist"); multitool_hit = new ItemMultitoolPassive().setUnlocalizedName("multitool_hit").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_fist");
multitool_dig = new ItemMultitoolTool(4.0F, MainRegistry.enumToolMaterialMultitool, ItemMultitoolTool.getAllBlocks()).setFull3D().setUnlocalizedName("multitool_dig").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":multitool_claw"); multitool_dig = new ItemMultitoolTool(4.0F, MainRegistry.enumToolMaterialMultitool, ItemMultitoolTool.getAllBlocks()).setFull3D().setUnlocalizedName("multitool_dig").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":multitool_claw");

View File

@ -1,11 +1,11 @@
package com.hbm.items.tool; package com.hbm.items.tool;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import com.google.common.collect.HashMultimap; import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import com.hbm.handler.WeaponAbility; import com.hbm.handler.ability.AvailableAbilities;
import com.hbm.handler.ability.IWeaponAbility;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
@ -19,13 +19,13 @@ import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword; import net.minecraft.item.ItemSword;
import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.EnumChatFormatting;
public class ItemSwordAbility extends ItemSword implements IItemWithAbility { public class ItemSwordAbility extends ItemSword {
private EnumRarity rarity = EnumRarity.common; private EnumRarity rarity = EnumRarity.common;
// was there a reason for this to be private? // was there a reason for this to be private?
protected float damage; protected float damage;
protected double movement; protected double movement;
private List<WeaponAbility> hitAbility = new ArrayList(); private AvailableAbilities hitAbilities = new AvailableAbilities();
public ItemSwordAbility(float damage, double movement, ToolMaterial material) { public ItemSwordAbility(float damage, double movement, ToolMaterial material) {
super(material); super(material);
@ -33,8 +33,8 @@ public class ItemSwordAbility extends ItemSword implements IItemWithAbility {
this.movement = movement; this.movement = movement;
} }
public ItemSwordAbility addHitAbility(WeaponAbility weaponAbility) { public ItemSwordAbility addHitAbility(IWeaponAbility weaponAbility, int level) {
this.hitAbility.add(weaponAbility); this.hitAbilities.addAbility(weaponAbility, level);
return this; return this;
} }
@ -50,15 +50,15 @@ public class ItemSwordAbility extends ItemSword implements IItemWithAbility {
public boolean hitEntity(ItemStack stack, EntityLivingBase victim, EntityLivingBase attacker) { public boolean hitEntity(ItemStack stack, EntityLivingBase victim, EntityLivingBase attacker) {
if(!attacker.worldObj.isRemote && !this.hitAbility.isEmpty() && attacker instanceof EntityPlayer && canOperate(stack)) { if(!attacker.worldObj.isRemote && attacker instanceof EntityPlayer && canOperate(stack)) {
// hacky hacky hack // hacky hacky hack
if(this == ModItems.mese_gavel) if(this == ModItems.mese_gavel)
attacker.worldObj.playSoundAtEntity(victim, "hbm:weapon.whack", 3.0F, 1.F); attacker.worldObj.playSoundAtEntity(victim, "hbm:weapon.whack", 3.0F, 1.F);
for(WeaponAbility ability : this.hitAbility) { this.hitAbilities.get().forEach((ability, level) -> {
ability.onHit(attacker.worldObj, (EntityPlayer) attacker, victim, this); ((IWeaponAbility)ability).onHit(level, attacker.worldObj, (EntityPlayer) attacker, victim, this);
} });
} }
stack.damageItem(1, attacker); stack.damageItem(1, attacker);
@ -77,23 +77,10 @@ public class ItemSwordAbility extends ItemSword implements IItemWithAbility {
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
hitAbilities.addInformation(list);
if(!this.hitAbility.isEmpty()) {
list.add("Weapon modifiers: ");
for(WeaponAbility ability : this.hitAbility) {
list.add(" " + EnumChatFormatting.RED + ability.getFullName());
}
}
} }
protected boolean canOperate(ItemStack stack) { protected boolean canOperate(ItemStack stack) {
return true; return true;
} }
@Override
public boolean isShears(ItemStack stack) {
return false;
}
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB