still porting project from Scala to Java.

This commit is contained in:
Leon 2016-10-26 15:44:18 -04:00
parent ffcf71939d
commit f13f528661
34 changed files with 1498 additions and 1677 deletions

View file

@ -10,7 +10,7 @@ import org.lwjgl.opengl.GL11;
public class EnergyMeter extends HeatMeter {
public void draw(double xpos, double ypos, double value) {
MuseTextureUtils.pushTexture(MuseTextureUtils.BLOCK_TEXTURE_QUILT());
MuseTextureUtils.pushTexture(MuseTextureUtils.BLOCK_TEXTURE_QUILT);
IIcon icon = Blocks.water.getIcon(0, 0);
GL11.glLineWidth(0.5f);
RenderState.on2D();

View file

@ -14,7 +14,7 @@ public class HeatMeter {
final int ysize = 32;
public void draw(double xpos, double ypos, double value) {
MuseTextureUtils.pushTexture(MuseTextureUtils.BLOCK_TEXTURE_QUILT());
MuseTextureUtils.pushTexture(MuseTextureUtils.BLOCK_TEXTURE_QUILT);
RenderState.blendingOn();
RenderState.on2D();
IIcon icon = Blocks.lava.getIcon(0, 0);

View file

@ -12,7 +12,7 @@ import net.minecraft.util.IIcon;
*/
public class WaterMeter extends HeatMeter {
public void draw(double xpos, double ypos, double value) {
MuseTextureUtils.pushTexture(MuseTextureUtils.BLOCK_TEXTURE_QUILT());
MuseTextureUtils.pushTexture(MuseTextureUtils.BLOCK_TEXTURE_QUILT);
RenderState.blendingOn();
RenderState.on2D();
IIcon icon = Blocks.water.getIcon(0, 0);

View file

@ -230,7 +230,7 @@ public class KeybindConfigFrame implements IGuiFrame {
}
newKeybindButton.draw();
trashKeybindButton.draw();
MuseTextureUtils.pushTexture(MuseTextureUtils.ITEM_TEXTURE_QUILT());
MuseTextureUtils.pushTexture(MuseTextureUtils.ITEM_TEXTURE_QUILT);
MuseRenderer.drawCenteredString(StatCollector.translateToLocal("gui.keybindInstructions1"), center.x(), center.y() + 40);
MuseRenderer.drawCenteredString(StatCollector.translateToLocal("gui.keybindInstructions2"), center.x(), center.y() + 50);
MuseRenderer.drawCenteredString(StatCollector.translateToLocal("gui.keybindInstructions3"), center.x(), center.y() + 60);

View file

@ -41,7 +41,6 @@ public class BlockTinkerTable extends Block {
public static void setRenderType(int id) {
renderType = id;
return;// this;
}
@Override

View file

@ -0,0 +1,253 @@
package net.machinemuse.powersuits.event;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.machinemuse.api.ModuleManager;
import net.machinemuse.general.gui.EnergyMeter;
import net.machinemuse.general.gui.HeatMeter;
import net.machinemuse.general.gui.WaterMeter;
import net.machinemuse.general.gui.clickable.ClickableKeybinding;
import net.machinemuse.numina.network.MusePacket;
import net.machinemuse.numina.network.PacketSender;
import net.machinemuse.powersuits.block.BlockTinkerTable;
import net.machinemuse.powersuits.common.Config;
import net.machinemuse.powersuits.control.KeybindManager;
import net.machinemuse.powersuits.control.PlayerInputMap;
import net.machinemuse.powersuits.item.ItemPowerArmorChestplate;
import net.machinemuse.powersuits.item.ItemPowerArmorHelmet;
import net.machinemuse.powersuits.item.ItemPowerFist;
import net.machinemuse.powersuits.network.packets.MusePacketPlayerUpdate;
import net.machinemuse.powersuits.powermodule.armor.WaterTankModule;
import net.machinemuse.powersuits.powermodule.misc.AutoFeederModule;
import net.machinemuse.powersuits.powermodule.misc.ClockModule;
import net.machinemuse.powersuits.powermodule.misc.CompassModule;
import net.machinemuse.utils.*;
import net.machinemuse.utils.render.MuseRenderer;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityClientPlayerMP;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import java.util.ArrayList;
/**
* Ported to Java by lehjr on 10/24/16.
*/
public class ClientTickHandler {
/**
* This handler is called before/after the game processes input events and
* updates the gui state mainly. *independent of rendering, so don't do rendering here
* -is also the parent class of KeyBindingHandleryBaseIcon
*
* @author MachineMuse
*/
public ArrayList<String> modules;
private boolean drawWaterMeter = false;
@SubscribeEvent
public void onPreClientTick(TickEvent.ClientTickEvent event) {
if (event.phase == TickEvent.Phase.START) {
for (ClickableKeybinding kb : KeybindManager.getKeybindings()) {
kb.doToggleTick();
}
} else {
EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
if (player != null && MuseItemUtils.getModularItemsInInventory(player).size() > 0) {
PlayerInputMap inputmap = PlayerInputMap.getInputMapFor(player.getCommandSenderName());
inputmap.forwardKey = Math.signum(player.movementInput.moveForward);
inputmap.strafeKey = Math.signum(player.movementInput.moveStrafe);
inputmap.jumpKey = player.movementInput.jump;
inputmap.sneakKey = player.movementInput.sneak;
inputmap.motionX = player.motionX;
inputmap.motionY = player.motionY;
inputmap.motionZ = player.motionZ;
if (inputmap.hasChanged()) {
inputmap.refresh();
MusePacket inputPacket = new MusePacketPlayerUpdate(player, inputmap);
PacketSender.sendToServer(inputPacket);
}
}
}
}
public void findInstalledModules(EntityPlayer player) {
if (player != null) {
ItemStack tool = player.getCurrentEquippedItem();
if (tool != null && tool.getItem() instanceof ItemPowerFist) {
}
ItemStack helmet = player.getCurrentArmor(3);
if (helmet != null && helmet.getItem() instanceof ItemPowerArmorHelmet) {
if (ModuleManager.itemHasActiveModule(helmet, AutoFeederModule.MODULE_AUTO_FEEDER)) {
modules.add(AutoFeederModule.MODULE_AUTO_FEEDER);
}
if (ModuleManager.itemHasActiveModule(helmet, ClockModule.MODULE_CLOCK)) {
modules.add(ClockModule.MODULE_CLOCK);
}
if (ModuleManager.itemHasActiveModule(helmet, CompassModule.MODULE_COMPASS)) {
modules.add(CompassModule.MODULE_COMPASS);
}
}
ItemStack chest = player.getCurrentArmor(2);
if (chest != null && chest.getItem() instanceof ItemPowerArmorChestplate) {
if (ModuleManager.itemHasActiveModule(chest, WaterTankModule.MODULE_WATER_TANK)) {
modules.add(WaterTankModule.MODULE_WATER_TANK);
}
}
}
}
@SideOnly(Side.CLIENT) // MPSA - is this needed or not?
@SubscribeEvent
public void onRenderTickEvent(TickEvent.RenderTickEvent event) {
ItemStack food = new ItemStack(Items.cooked_beef);
ItemStack clock = new ItemStack(Items.clock);
ItemStack compass = new ItemStack(Items.compass);
int yOffsetString = 18;
double yOffsetIcon = 16.0;
String ampm = "";
double yBaseIcon;
int yBaseString;
if (Config.useGraphicalMeters()) {
yBaseIcon = 150.0;
yBaseString = 155;
} else {
yBaseIcon = 26.0;
yBaseString = 32;
}
if (event.phase == TickEvent.Phase.END) {
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
modules = new ArrayList<String>();
findInstalledModules(player);
if (player != null && MuseItemUtils.modularItemsEquipped(player).size() > 0 && Minecraft.getMinecraft().currentScreen == null) {
Minecraft mc = Minecraft.getMinecraft();
ScaledResolution screen = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
for (int i = 0; i < modules.size(); i++) {
if (modules.get(i) == AutoFeederModule.MODULE_AUTO_FEEDER) {
int foodLevel = (int) MuseItemUtils.getFoodLevel(player.getCurrentArmor(3));
String num = MuseStringUtils.formatNumberShort(foodLevel);
if (i == 0) {
MuseRenderer.drawString(num, 17, yBaseString);
MuseRenderer.drawItemAt(-1.0, yBaseIcon, food);
} else {
MuseRenderer.drawString(num, 17, yBaseString + (yOffsetString * i));
MuseRenderer.drawItemAt(-1.0, yBaseIcon + (yOffsetIcon * i), food);
}
} else if (modules.get(i) == ClockModule.MODULE_CLOCK) {
long time = player.worldObj.provider.getWorldTime();
long hour = ((time % 24000) / 1000);
if (Config.use24hClock()) {
if (hour < 19) {
hour += 6;
} else {
hour -= 18;
}
ampm = "h";
} else {
if (hour < 6) {
hour += 6;
ampm = " AM";
} else if (hour == 6) {
hour = 12;
ampm = " PM";
} else if (hour > 6 && hour < 18) {
hour -= 6;
ampm = " PM";
} else if (hour == 18) {
hour = 12;
ampm = " AM";
} else {
hour -= 18;
ampm = " AM";
}
}
if (i == 0) {
MuseRenderer.drawString(hour + ampm, 17, yBaseString);
MuseRenderer.drawItemAt(-1.0, yBaseIcon, clock);
} else {
MuseRenderer.drawString(hour + ampm, 17, yBaseString + (yOffsetString * i));
MuseRenderer.drawItemAt(-1.0, yBaseIcon + (yOffsetIcon * i), clock);
}
} else if (modules.get(i) == CompassModule.MODULE_COMPASS) {
if (i == 0) {
MuseRenderer.drawItemAt(-1.0, yBaseIcon, compass);
} else {
MuseRenderer.drawItemAt(-1.0, yBaseIcon + (yOffsetIcon * i), compass);
}
} else if (modules.get(i) == WaterTankModule.MODULE_WATER_TANK) {
drawWaterMeter = true;
}
}
drawMeters(player, screen);
}
}
}
protected HeatMeter heat = null;
protected HeatMeter energy = null;
protected WaterMeter water = null;
private void drawMeters(EntityPlayer player, ScaledResolution screen) {
double left = screen.getScaledWidth() - 30;
double top = (double)screen.getScaledHeight() / 2.0 - (double)16;
/* Heat Meter ---------------------------------------------------------*/
double currHeat = MuseHeatUtils.getPlayerHeat(player);
double maxHeat = MuseHeatUtils.getMaxHeat(player);
String currHeatStr = MuseStringUtils.formatNumberShort(currHeat);
String maxHeatStr = MuseStringUtils.formatNumberShort(maxHeat);
if (Config.useGraphicalMeters()) {
if (heat == null) {
heat = new HeatMeter();
}
heat.draw(left + (double)8, top, currHeat / maxHeat);
MuseRenderer.drawRightAlignedString(currHeatStr, left - (double)2, top + (double)20);
} else {
MuseRenderer.drawString(currHeatStr + '/' + maxHeatStr + " C", 1, 10);
}
/* Energy Meter ------------------------------------------------------*/
double currWater = AddonWaterUtils.getPlayerWater(player);
double maxWater = AddonWaterUtils.getMaxWater(player);
double currEnergy = ElectricItemUtils.getPlayerEnergy(player);
double maxEnergy = ElectricItemUtils.getMaxEnergy(player);
if (maxEnergy > 0 && BlockTinkerTable.energyIcon != null) {
String currEnergyStr = MuseStringUtils.formatNumberShort(currEnergy);
String maxEnergyStr = MuseStringUtils.formatNumberShort(maxEnergy);
if (Config.useGraphicalMeters()) {
if (energy == null) {
energy = new EnergyMeter();
}
energy.draw(left, top, currEnergy / maxEnergy);
MuseRenderer.drawRightAlignedString(currEnergyStr, left - 2, top + 10);
}
else {
MuseRenderer.drawString(currEnergyStr + '/' + maxEnergyStr + " \u1D60", 1, 1);
}
}
/* Water Meter --------------------------------------------------------*/
if (maxWater > 0 && drawWaterMeter ) {
String currWaterStr = MuseStringUtils.formatNumberShort(currWater);
String maxWaterStr = MuseStringUtils.formatNumberShort(maxWater);
if (Config.useGraphicalMeters()) {
if (water == null) {
water = new WaterMeter();
}
water.draw(left + 16, top, currWater / maxWater);
MuseRenderer.drawRightAlignedString(currWaterStr, left - 2, top + 30);
}
else {
MuseRenderer.drawString(currWaterStr + '/' + maxWaterStr + " buckets", 1, 19);
}
}
}
}

View file

@ -0,0 +1,22 @@
package net.machinemuse.powersuits.event;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent;
import net.machinemuse.numina.network.PacketSender;
import net.machinemuse.powersuits.network.packets.MusePacketPropertyModifierConfig;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
/**
* Author: MachineMuse (Claire Semple)
* Created: 8:01 PM, 12/05/13
*
* Ported to Java by lehjr on 10/24/16.
*/
public class PlayerLoginHandlerThingy {
@SubscribeEvent
public static void onPlayerLogin(PlayerEvent.PlayerLoggedInEvent e) {
EntityPlayer player = e.player;
PacketSender.sendTo(new MusePacketPropertyModifierConfig(player, null), (EntityPlayerMP)player);
}
}

View file

@ -0,0 +1,94 @@
package net.machinemuse.powersuits.event;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.relauncher.Side;
import net.machinemuse.api.ModuleManager;
import net.machinemuse.api.moduletrigger.IPlayerTickModule;
import net.machinemuse.general.sound.SoundDictionary;
import net.machinemuse.numina.basemod.NuminaConfig;
import net.machinemuse.numina.general.MuseMathUtils;
import net.machinemuse.numina.sound.Musique;
import net.machinemuse.powersuits.common.Config;
import net.machinemuse.utils.MuseHeatUtils;
import net.machinemuse.utils.MuseItemUtils;
import net.machinemuse.utils.MusePlayerUtils;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.event.entity.living.LivingEvent;
import java.util.List;
/**
* Created by Claire Semple on 9/8/2014.
*
* Ported to Java by lehjr on 10/24/16.
*/
public class PlayerUpdateHandler {
@SubscribeEvent
public void onPlayerUpdate(LivingEvent.LivingUpdateEvent e){
if (e.entity instanceof EntityPlayer){
EntityPlayer player = (EntityPlayer) e.entity;
List<ItemStack> modularItemsEquipped = MuseItemUtils.modularItemsEquipped(player);
double totalWeight = MuseItemUtils.getPlayerWeight(player);
double weightCapacity = Config.getWeightCapacity();
for (ItemStack stack :modularItemsEquipped) {
if (stack.getTagCompound().hasKey("ench")) {
stack.getTagCompound().removeTag("ench");
}
}
boolean foundItemWithModule = false;
for (IPlayerTickModule module : ModuleManager.getPlayerTickModules()) {
foundItemWithModule = false;
for (ItemStack itemStack : modularItemsEquipped) {
if (module.isValidForItem(itemStack)) {
if (ModuleManager.itemHasActiveModule(itemStack, module.getDataName())) {
module.onPlayerTickActive(player, itemStack);
foundItemWithModule = true;
}
}
}
if (!foundItemWithModule) {
for (ItemStack itemStack : modularItemsEquipped) {
module.onPlayerTickInactive(player, itemStack);
}
}
}
boolean foundItem = modularItemsEquipped.size() > 0;
if (foundItem) {
player.fallDistance = (float) MovementManager.computeFallHeightFromVelocity(MuseMathUtils.clampDouble(player.motionY, -1000.0, 0.0));
if (totalWeight > weightCapacity) {
player.motionX *= weightCapacity / totalWeight;
player.motionZ *= weightCapacity / totalWeight;
}
MuseHeatUtils.coolPlayer(player, MusePlayerUtils.getPlayerCoolingBasedOnMaterial(player));
double maxHeat = MuseHeatUtils.getMaxHeat(player);
double currHeat = MuseHeatUtils.getPlayerHeat(player);
if (currHeat > maxHeat) {
player.attackEntityFrom(MuseHeatUtils.overheatDamage, (float) (Math.sqrt(currHeat - maxHeat)/* was (int) */ / 4));
player.setFire(1);
}
else {
player.extinguish();
}
double velsq2 = MuseMathUtils.sumsq(player.motionX, player.motionY, player.motionZ) - 0.5;
if ((FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) && NuminaConfig.useSounds()) {
if (player.isAirBorne && velsq2 > 0) {
Musique.playerSound(player, SoundDictionary.SOUND_GLIDER, (float)(velsq2 / 3), 1.0f, true);
}
else {
Musique.stopPlayerSound(player, SoundDictionary.SOUND_GLIDER);
}
}
}
}
}
}

View file

@ -0,0 +1,125 @@
package net.machinemuse.powersuits.event;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.machinemuse.api.ModuleManager;
import net.machinemuse.general.gui.clickable.ClickableKeybinding;
import net.machinemuse.general.gui.clickable.ClickableModule;
import net.machinemuse.numina.geometry.Colour;
import net.machinemuse.numina.geometry.DrawableMuseRect;
import net.machinemuse.numina.render.MuseIconUtils;
import net.machinemuse.numina.render.MuseTextureUtils;
import net.machinemuse.powersuits.common.Config;
import net.machinemuse.powersuits.control.KeybindManager;
import net.machinemuse.powersuits.powermodule.misc.BinocularsModule;
import net.machinemuse.powersuits.powermodule.movement.FlightControlModule;
import net.machinemuse.powersuits.powermodule.movement.GliderModule;
import net.machinemuse.powersuits.powermodule.movement.JetBootsModule;
import net.machinemuse.powersuits.powermodule.movement.JetPackModule;
import net.machinemuse.utils.MuseItemUtils;
import net.machinemuse.utils.render.MuseRenderer;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityClientPlayerMP;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.client.event.*;
/**
* Ported to Java by lehjr on 10/24/16.
*/
public class RenderEventHandler {
private static boolean ownFly;
private final DrawableMuseRect frame = new DrawableMuseRect(Config.keybindHUDx(), Config.keybindHUDy(), Config.keybindHUDx() + (double)16, Config.keybindHUDy() + (double)16, true, Colour.DARKGREEN.withAlpha(0.2), Colour.GREEN.withAlpha(0.2));
public RenderEventHandler() {
this.ownFly = false;
}
@SubscribeEvent
public void onTextureStitch(TextureStitchEvent.Post event) {
}
@SideOnly(Side.CLIENT)
@SubscribeEvent
public void renderLast(RenderWorldLastEvent event) {
Minecraft mc = Minecraft.getMinecraft();
ScaledResolution screen = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
}
@SubscribeEvent
public void onPreRenderPlayer(RenderPlayerEvent.Pre event) {
if (!event.entityPlayer.capabilities.isFlying && !event.entityPlayer.onGround && this.playerHasFlightOn(event.entityPlayer)) {
event.entityPlayer.capabilities.isFlying = true;
RenderEventHandler.ownFly =true;
}
}
private boolean playerHasFlightOn(EntityPlayer player) {
return ModuleManager.itemHasActiveModule(player.getCurrentArmor(2), JetPackModule.MODULE_JETPACK) || ModuleManager.itemHasActiveModule(player.getCurrentArmor(2), GliderModule.MODULE_GLIDER) || ModuleManager.itemHasActiveModule(player.getCurrentArmor(0), JetBootsModule.MODULE_JETBOOTS) || ModuleManager.itemHasActiveModule(player.getCurrentArmor(3), FlightControlModule.MODULE_FLIGHT_CONTROL);
}
@SubscribeEvent
public void onPostRenderPlayer(RenderPlayerEvent.Post event) {
if (RenderEventHandler.ownFly) {
RenderEventHandler.ownFly = false;
event.entityPlayer.capabilities.isFlying = false;
}
}
@SubscribeEvent
public void onFOVUpdate(FOVUpdateEvent e) {
ItemStack helmet = e.entity.getCurrentArmor(3);
if (ModuleManager.itemHasActiveModule(helmet, "Binoculars")) {
e.newfov /= (float)ModuleManager.computeModularProperty(helmet, BinocularsModule.FOV_MULTIPLIER);
}
}
@SubscribeEvent
public void onPostRenderGameOverlayEvent(RenderGameOverlayEvent.Post e) {
RenderGameOverlayEvent.ElementType elementType = e.type;
if (RenderGameOverlayEvent.ElementType.HOTBAR.equals((Object)elementType)) {
this.drawKeybindToggles();
}
}
public void drawKeybindToggles() {
if (Config.keybindHUDon()) {
Minecraft mc = Minecraft.getMinecraft();
EntityClientPlayerMP player = mc.thePlayer;
ScaledResolution screen = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
frame.setLeft(Config.keybindHUDx());
frame.setTop(Config.keybindHUDy());
frame.setBottom(frame.top() + 16);
for (ClickableKeybinding kb: KeybindManager.getKeybindings()) {
if (kb.displayOnHUD) {
double stringwidth = net.machinemuse.utils.render.MuseRenderer.getStringWidth(kb.getLabel());
frame.setWidth(stringwidth + kb.getBoundModules().size() * 16);
frame.draw();
MuseRenderer.drawString(kb.getLabel(), frame.left() + 1, frame.top() + 3, (kb.toggleval) ? Colour.RED : Colour.GREEN);
double x = frame.left() + stringwidth;
for (ClickableModule module: kb.getBoundModules()) {
MuseTextureUtils.pushTexture(module.getModule().getStitchedTexture(null));
boolean active = false;
for (ItemStack stack : MuseItemUtils.modularItemsEquipped(player)) {
if (ModuleManager.itemHasActiveModule(stack, module.getModule().getDataName()))
active = true;
}
MuseIconUtils.drawIconAt(x, frame.top(), module.getModule().getIcon(null), (active) ? Colour.WHITE : Colour.DARKGREY.withAlpha(0.5));
MuseTextureUtils.popTexture();
x += 16;
}
frame.setTop(frame.top() + 16);
frame.setBottom(frame.top() + 16);
}
}
}
}
}

View file

@ -0,0 +1,32 @@
package net.machinemuse.powersuits.item;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import ic2.api.item.IMetalArmor;
import net.machinemuse.utils.render.MuseRenderer;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
/**
* Ported to Java by lehjr on 10/26/16.
*/
@Optional.InterfaceList({ @Optional.Interface(iface = "ic2.api.item.IMetalArmor", modid = "IC2", striprefs = true) })
public class ItemPowerArmorBoots extends ItemPowerArmor implements IMetalArmor
{
private final String iconpath = MuseRenderer.ICON_PREFIX + "armorfeet";
public ItemPowerArmorBoots() {
super(0, 3);
this.setUnlocalizedName("powerArmorBoots");
}
@SideOnly(Side.CLIENT)
public void registerIcons(final IIconRegister iconRegister) {
this.itemIcon = iconRegister.registerIcon(this.iconpath);
}
public boolean isMetalArmor(final ItemStack itemStack, final EntityPlayer entityPlayer) {
return true;
}
}

View file

@ -0,0 +1,28 @@
package net.machinemuse.powersuits.item;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.machinemuse.utils.render.MuseRenderer;
import net.minecraft.client.renderer.texture.IIconRegister;
/**
* Ported to Java by lehjr on 10/26/16.
*/
public class ItemPowerArmorChestplate extends ItemPowerArmor
{
private final String iconpath = MuseRenderer.ICON_PREFIX + "armortorso";
public ItemPowerArmorChestplate() {
super(0, 1);
this.setUnlocalizedName("powerArmorChestplate");
}
public String iconpath() {
return this.iconpath;
}
@SideOnly(Side.CLIENT)
public void registerIcons(final IIconRegister iconRegister) {
this.itemIcon = iconRegister.registerIcon(this.iconpath());
}
}

View file

@ -0,0 +1,64 @@
package net.machinemuse.powersuits.item;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import forestry.api.core.IArmorNaturalist;
import micdoodle8.mods.galacticraft.api.item.IBreathableArmor;
import net.machinemuse.api.ModuleManager;
import net.machinemuse.powersuits.powermodule.armor.ApiaristArmorModule;
import net.machinemuse.powersuits.powermodule.misc.AirtightSealModule;
import net.machinemuse.powersuits.powermodule.misc.ThaumGogglesModule;
import net.machinemuse.utils.render.MuseRenderer;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import thaumcraft.api.IGoggles;
import thaumcraft.api.nodes.IRevealer;
/**
* Ported to Java by lehjr on 10/26/16.
*/
@Optional.InterfaceList({
@Optional.Interface(iface = "forestry.api.core.IArmorNaturalist", modid = "Forestry", striprefs = true),
@Optional.Interface(iface = "thaumcraft.api.IGoggles", modid = "Thaumcraft", striprefs = true),
@Optional.Interface(iface = "thaumcraft.api.nodes.IRevealer", modid = "Thaumcraft", striprefs = true),
@Optional.Interface(iface = "micdoodle8.mods.galacticraft.api.item.IBreathableArmor", modid = "GalacticraftCore", striprefs = true) })
public class ItemPowerArmorHelmet extends ItemPowerArmor implements IArmorNaturalist, IBreathableArmor, IGoggles, IRevealer
{
private final String iconpath;
public ItemPowerArmorHelmet() {
super(0, 0);
this.iconpath = MuseRenderer.ICON_PREFIX + "armorhead";
this.setUnlocalizedName("powerArmorHelmet");
}
@SideOnly(Side.CLIENT)
public void registerIcons(final IIconRegister iconRegister) {
this.itemIcon = iconRegister.registerIcon(this.iconpath);
}
public boolean showIngamePopups(final ItemStack itemstack, final EntityLivingBase player) {
return ModuleManager.itemHasActiveModule(itemstack, ThaumGogglesModule.MODULE_THAUM_GOGGLES);
}
public boolean showNodes(final ItemStack itemstack, final EntityLivingBase player) {
return ModuleManager.itemHasActiveModule(itemstack, ThaumGogglesModule.MODULE_THAUM_GOGGLES);
}
@Optional.Method(modid = "Forestry")
public boolean canSeePollination(final EntityPlayer player, final ItemStack helm, final boolean doSee) {
return ModuleManager.itemHasActiveModule(helm, ApiaristArmorModule.MODULE_APIARIST_ARMOR);
}
@Optional.Method(modid = "GalacticraftCore")
public boolean handleGearType(final IBreathableArmor.EnumGearType geartype) {
return geartype == EnumGearType.HELMET;
}
@Optional.Method(modid = "GalacticraftCore")
public boolean canBreathe(final ItemStack helm, final EntityPlayer player, final IBreathableArmor.EnumGearType geartype) {
return ModuleManager.itemHasActiveModule(helm, AirtightSealModule.AIRTIGHT_SEAL_MODULE);
}
}

View file

@ -0,0 +1,23 @@
package net.machinemuse.powersuits.item;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.machinemuse.utils.render.MuseRenderer;
import net.minecraft.client.renderer.texture.IIconRegister;
/**
* Ported to Java by lehjr on 10/26/16.
*/
public class ItemPowerArmorLeggings extends ItemPowerArmor {
private final String iconpath = MuseRenderer.ICON_PREFIX + "armorlegs";
public ItemPowerArmorLeggings() {
super(0, 2);
this.setUnlocalizedName("powerArmorLeggings");
}
@SideOnly(Side.CLIENT)
public void registerIcons(final IIconRegister iconRegister) {
this.itemIcon = iconRegister.registerIcon(this.iconpath);
}
}

View file

@ -156,7 +156,7 @@ public abstract class PowerModuleBase implements ILocalizeableModule {
@Override
public String getStitchedTexture(ItemStack item) {
return MuseTextureUtils.ITEM_TEXTURE_QUILT();
return MuseTextureUtils.ITEM_TEXTURE_QUILT;
// alternatively
// return "/terrain.png";
}

View file

@ -403,8 +403,7 @@ public class MuseItemUtils {
public static double getFoodLevel(ItemStack stack) {
if (stack != null && stack.getItem() instanceof IModularItem) {
NBTTagCompound itemTag = MuseItemUtils.getMuseItemTag(stack);
Double foodLevel = itemTag.getDouble("Food");
return foodLevel;
return itemTag.getDouble("Food");
}
return 0.0;
}

View file

@ -1,737 +0,0 @@
//package net.machinemuse.general.gui.frame;
//
//import net.machinemuse.general.gui.clickable.ClickableSlider;
//import net.machinemuse.numina.general.MuseLogger;
//import net.machinemuse.numina.geometry.Colour;
//import net.machinemuse.numina.geometry.DrawableMuseRect;
//import net.machinemuse.numina.geometry.MusePoint2D;
//import net.machinemuse.numina.geometry.MuseRect;
//import net.machinemuse.numina.network.PacketSender;
//import net.machinemuse.powersuits.item.ItemPowerArmor;
//import net.machinemuse.powersuits.network.packets.MusePacketColourInfo;
//import net.machinemuse.utils.MuseItemUtils;
//import net.machinemuse.utils.render.GuiIcons;
//import net.minecraft.client.Minecraft;
//import net.minecraft.client.entity.EntityClientPlayerMP;
//import net.minecraft.item.Item;
//import net.minecraft.nbt.NBTTagCompound;
//import net.minecraft.nbt.NBTTagIntArray;
//import net.minecraft.util.StatCollector;
//import org.apache.commons.lang3.ArrayUtils;
//
//import java.util.Arrays;
//import java.util.List;
//
///**
// * Author: MachineMuse (Claire Semple)
// * Created: 4:19 AM, 03/05/13
// *
// * Ported to Java by lehjr on 10/20/16.
// */
//public class ColourPickerFrame implements IGuiFrame {
// private final MuseRect borderRef;
// private final Colour insideColour;
// private final Colour borderColour;
// private final ItemSelectionFrame itemSelector;
// private final DrawableMuseRect border;
// private final ClickableSlider rslider;
// private final ClickableSlider gslider;
// private final ClickableSlider bslider;
// // private Option<ClickableSlider> selectedSlider;
// private ClickableSlider selectedSlider;
// private int selectedColour;
// private int decrAbove;
//
//
// public ColourPickerFrame(final MuseRect borderRef, final Colour insideColour, final Colour borderColour, final ItemSelectionFrame itemSelector) {
// this.borderRef = borderRef;
// this.insideColour = insideColour;
// this.borderColour = borderColour;
// this.itemSelector = itemSelector;
// this.border = new DrawableMuseRect(borderRef, insideColour, borderColour);
// this.rslider = new ClickableSlider(new MusePoint2D(this.border.centerx(), this.border.top() + (double)8), this.border.width() - (double)10, StatCollector.translateToLocal((String)"gui.red"));
// this.gslider = new ClickableSlider(new MusePoint2D(this.border.centerx(), this.border.top() + (double)24), this.border.width() - (double)10, StatCollector.translateToLocal((String)"gui.green"));
// this.bslider = new ClickableSlider(new MusePoint2D(this.border.centerx(), this.border.top() + (double)40), this.border.width() - (double)10, StatCollector.translateToLocal((String)"gui.blue"));
// this.selectedSlider = null;
// this.selectedColour = 0;
// this.decrAbove = -1;
// }
//
// int[] colours() {
// int[] ret = getOrCreateColourTag().func_150302_c();
// return (ret != null) ? ret : new int[0];
// }
//
//// public int[] colours() {
//// return (int[])this.getOrCreateColourTag().map((Function1)new scala.Serializable(this){
////
//// public final int[] apply(NBTTagIntArray e) {
//// return e.func_150302_c();
//// }
//// }).getOrElse((Function0)new scala.Serializable(this){
////
//// public final int[] apply() {
//// return new int[0];
//// }
//// });
//// }
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
// @Override
// public void onMouseDown(double x, double y, int button) {
// if (rslider.hitBox(x, y)) {
// selectedSlider = rslider;
// } else if (gslider.hitBox(x, y)) {
// selectedSlider = gslider;
// } else if (bslider.hitBox(x, y)) {
// selectedSlider = bslider;
// } else {
// selectedSlider = null;
// }
// // add
// if (y > border.bottom() - 16 && y < border.bottom() - 8) {
// int colourCol = ((int)(x - border.left() - 8.0)) / 8;
// if (colourCol >= 0 && colourCol < colours().length) {
// onSelectColour(colourCol);
// } else if (colourCol == colours().length) {
// // append White
// MuseLogger.logDebug("Adding");
// int[] intArray = ArrayUtils.addAll(getIntArray(getOrCreateColourTag()), new int[]{Colour.WHITE.getInt()});
// }
// // remove
// if (y > border.bottom() - 24 && y < border.bottom() - 16 && x > border.left() + 8 + selectedColour * 8 && x < border.left() + 16 + selectedColour * 8) {
//
//
// NBTTagIntArray nbtTagIntArray = getOrCreateColourTag();
//
// b.
//
//
// for (NBTTagCompound tag: ) {
//
// }
//
//
//
// .foreach(e => {
// if (getIntArray(e).size > 1) {
// setColourTagMaybe( getIntArray(e) diff Array(getIntArray(e)(selectedColour)))
// decrAbove = selectedColour
// if (selectedColour == getIntArray(e).size) {
// selectedColour = selectedColour - 1
// }
// val player = Minecraft.getMinecraft.thePlayer
// if (player.worldObj.isRemote)
// PacketSender.sendToServer(new MusePacketColourInfo(player, itemSelector.getSelectedItem.inventorySlot, e.func_150302_c))
// }
// })
//
// }
//
// }
// }
//
// @Override
// public void onMouseDown(double x, double y, int button) {
//// BoxedUnit boxedUnit;
// if (this.rslider.hitBox(x, y)) {
// this.selectedSlider = this.rslider;
// }
// else if (this.gslider.hitBox(x, y)) {
// this.selectedSlider = this.gslider;
// }
// else if (this.bslider.hitBox(x, y)) {
// this.selectedSlider = this.bslider;
// }
// else {
// this.selectedSlider = null;
// }
// if (y > this.border.bottom() - (double)16 && y < this.border.bottom() - (double)8) {
// int colourCol = (int)(x - this.border.left() - 8.0) / 8;
// if (colourCol >= 0 && colourCol < Predef..MODULE$.intArrayOps(this.colours()).size()) {
// this.onSelectColour(colourCol);
// boxedUnit = BoxedUnit.UNIT;
// } else if (colourCol == Predef..MODULE$.intArrayOps(this.colours()).size()) {
// MuseLogger.logDebug("Adding");
// boxedUnit = this.getOrCreateColourTag().map((Function1)new scala.Serializable(this){
// private final /* synthetic */ ColourPickerFrame $outer;
//
// public final Option<NBTTagIntArray> apply(NBTTagIntArray e) {
// return this.$outer.setColourTagMaybe((int[])Predef..MODULE$.intArrayOps(this.$outer.getIntArray(e)).$colon$plus((Object)scala.runtime.BoxesRunTime.boxToInteger((int)Colour.WHITE.getInt()), ClassTag..MODULE$.Int()));
// }
// });
// } else {
// boxedUnit = BoxedUnit.UNIT;
// }
// } else {
// boxedUnit = BoxedUnit.UNIT;
// }
// if (y > this.border().bottom() - (double)24 && y < this.border().bottom() - (double)16 && x > this.border().left() + (double)8 + (double)(this.selectedColour() * 8) && x < this.border().left() + (double)16 + (double)(this.selectedColour() * 8)) {
// this.getOrCreateColourTag().foreach((Function1)new scala.Serializable(this){
// private final /* synthetic */ ColourPickerFrame $outer;
//
// public final void apply(NBTTagIntArray e) {
// if (Predef..MODULE$.intArrayOps(this.$outer.getIntArray(e)).size() > 1) {
// this.$outer.setColourTagMaybe((int[])Predef..MODULE$.intArrayOps(this.$outer.getIntArray(e)).diff((scala.collection.GenSeq)Predef..MODULE$.wrapIntArray(new int[]{this.$outer.getIntArray(e)[this.$outer.selectedColour()]})));
// this.$outer.decrAbove_$eq(this.$outer.selectedColour());
// if (this.$outer.selectedColour() == Predef..MODULE$.intArrayOps(this.$outer.getIntArray(e)).size()) {
// this.$outer.selectedColour_$eq(this.$outer.selectedColour() - 1);
// }
// EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
// if (player.worldObj.isRemote) {
// PacketSender$.MODULE$.sendToServer(new MusePacketColourInfo((EntityPlayer)player, this.$outer.itemSelector().getSelectedItem().inventorySlot, e.func_150302_c()));
// }
// }
// }
// });
// }
// }
//
//
// @Override
// public void onMouseDown(final double x, final double y, final int button) {
// if (this.rslider.hitBox(x, y)) {
// this.selectedSlider = this.rslider;
// }
// else if (this.gslider.hitBox(x, y)) {
// this.selectedSlider = this.gslider;
// }
// else if (this.bslider.hitBox(x, y)) {
// this.selectedSlider = this.bslider;
// }
// else {
// this.selectedSlider = null;
// }
// if (y > this.border.bottom() - 16 && y < this.border.bottom() - 8) {
// final int colourCol = (int)(x - this.border.left() - 8.0) / 8;
// if (colourCol >= 0 && colourCol < Predef$.MODULE$.intArrayOps(this.colours()).size()) {
// this.onSelectColour(colourCol);
// final BoxedUnit boxedUnit = BoxedUnit.UNIT;
// }
// else if (colourCol == Predef$.MODULE$.intArrayOps(this.colours()).size()) {
// MuseLogger.logDebug("Adding");
// this.getOrCreateColourTag().map((Function1)new ColourPickerFrame$$anonfun$onMouseDown.ColourPickerFrame$$anonfun$onMouseDown$1(this));
// }
// else {
// final BoxedUnit boxedUnit = BoxedUnit.UNIT;
// }
// }
// else {
// final BoxedUnit boxedUnit = BoxedUnit.UNIT;
// }
// if (y > this.border.bottom() - 24 && y < this.border.bottom() - 16 && x > this.border.left() + 8 + this.selectedColour * 8 && x < this.border.left() + 16 + this.selectedColour * 8) {
// this.getOrCreateColourTag().foreach((Function1)new ColourPickerFrame$$anonfun$onMouseDown.ColourPickerFrame$$anonfun$onMouseDown$2(this));
// }
// }
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
// @Override
// public void onMouseUp(double x, double y, int button) {
// selectedSlider = null;
// }
//
// @Override
// public void update(double mousex, double mousey) {
//
// selectedSlider.map(s => {
// s.setValueByX(mousex);
// if (colours().length > selectedColour) {
// colours(selectedColour) = Colour.getInt(rslider.value(), gslider.value(), bslider.value(), 1.0);
// EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
// if (player.worldObj.isRemote)
// PacketSender.sendToServer(new MusePacketColourInfo(player, itemSelector.getSelectedItem().inventorySlot, colours()));
// }
// })
//
// }
//
// @Override
// public void draw() {
// border.draw();
// rslider.draw();
// gslider.draw();
// bslider.draw();
// for (int i = 0; i < colours().length; i++) {
// new GuiIcons.ArmourColourPatch(border.left() + 8 + i * 8, border.bottom() - 16, new Colour(colours(i)), null, null, null, null);
// }
// new GuiIcons.ArmourColourPatch(border.left() + 8 + colours().length * 8, border.bottom() - 16, Colour.WHITE, null, null, null, null);
// new GuiIcons.SelectedArmorOverlay(border.left() + 8 + selectedColour * 8, border.bottom() - 16, Colour.WHITE, null, null, null, null);
// new GuiIcons.MinusSign(border.left() + 8 + selectedColour * 8, border.bottom() - 24, Colour.RED, null, null, null, null);
// new GuiIcons.PlusSign(border.left() + 8 + colours().length * 8, border.bottom() - 16, Colour.GREEN, null, null, null, null);
// }
//
// @Override
// public List<String> getToolTip(int x, int y) {
// return null;
// }
//
// NBTTagIntArray getOrCreateColourTag() {
// if (itemSelector.getSelectedItem() == null)
// return null;
// NBTTagCompound renderSpec = MuseItemUtils.getMuseRenderTag(itemSelector.getSelectedItem().getItem());
// if (renderSpec.hasKey("colours") && renderSpec.getTag("colours") instanceof NBTTagIntArray)
// return (NBTTagIntArray)renderSpec.getTag("colours");
// else {
// Item itembase = itemSelector.getSelectedItem().getItem().getItem();
//
//
// if (itembase instanceof ItemPowerArmor) {
// int[] intArray = {
// ((ItemPowerArmor) itembase).getColorFromItemStack(itemSelector.getSelectedItem().getItem()).getInt(),
// ((ItemPowerArmor) itembase).getGlowFromItemStack(itemSelector.getSelectedItem().getItem()).getInt()};
//
// renderSpec.setIntArray("colours", intArray);
// } else {
// int[] intArray = new int[0];
// renderSpec.setIntArray("colours", intArray);
// }
// EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
// if (player.worldObj.isRemote)
// PacketSender.sendToServer(new MusePacketColourInfo(player, itemSelector.getSelectedItem().inventorySlot, colours()));
// return (NBTTagIntArray)renderSpec.getTag("colours");
// }
// }
//
// NBTTagIntArray setColourTagMaybe(int[] newarray) {
// if (itemSelector.getSelectedItem() == null)
// return null;
// NBTTagCompound renderSpec = MuseItemUtils.getMuseRenderTag(itemSelector.getSelectedItem().getItem());
// renderSpec.setTag("colours", new NBTTagIntArray(newarray));
// EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
// if (player.worldObj.isRemote)
// PacketSender.sendToServer(new MusePacketColourInfo(player, itemSelector.getSelectedItem().inventorySlot, colours()));
// return (NBTTagIntArray)renderSpec.getTag("colours");
// }
//
//// public Option<NBTTagIntArray> setColourTagMaybe(final int[] newarray) {
// public NBTTagIntArray setColourTagMaybe(final int[] newarray) {
// if (this.itemSelector().getSelectedItem() == null) {
// return (NBTTagIntArray)None$.MODULE$;
// }
// final NBTTagCompound renderSpec = MuseItemUtils.getMuseRenderTag(this.itemSelector().getSelectedItem().getItem());
// renderSpec.setTag("colours", (NBTBase)new NBTTagIntArray(newarray));
// final EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
// if (player.worldObj.isRemote) {
// PacketSender$.MODULE$.sendToServer(new MusePacketColourInfo((EntityPlayer)player, this.itemSelector().getSelectedItem().inventorySlot, this.colours()));
// }
// return (Option<NBTTagIntArray>)new Some((Object)renderSpec.getTag("colours"));
// }
//
// public Buffer<Object> importColours() {
// final Buffer colours = (Buffer)Buffer$.MODULE$.empty();
// return (Buffer<Object>)colours;
// }
//
//// int[] importColours () {
//// return new int[0];
////// colours = mutable.Buffer.empty[Int]
////// return colours;
//// }
//
// public void refreshColours() {
// // getOrCreateColourTag.map(coloursTag => {
// // val colourints: Array[Int] = coloursTag.intArray
// // val colourset: HashSet[Int] = HashSet.empty ++ colours ++ colourints
// // val colourarray = colourset.toArray
// // coloursTag.intArray = colourarray
// // })
// }
//
// public void onSelectColour(final int i) {
// final Colour c = new Colour(this.colours()[i]);
// this.rslider().setValue(c.r);
// this.gslider().setValue(c.g);
// this.bslider().setValue(c.b);
// this.selectedColour =i;
// }
//
// public int[] getIntArray(final NBTTagIntArray e) {
// return e.func_150302_c();
// }
//}
//public class ColourPickerFrame implements IGuiFrame
//{
// private final MuseRect borderRef;
// private final Colour insideColour;
// private final Colour borderColour;
// private final ItemSelectionFrame itemSelector;
// private final DrawableMuseRect border;
// private final ClickableSlider rslider;
// private final ClickableSlider gslider;
// private final ClickableSlider bslider;
// private Option<ClickableSlider> selectedSlider;
// private int selectedColour;
// private int decrAbove;
//
// public MuseRect borderRef() {
// return this.borderRef;
// }
//
// public Colour insideColour() {
// return this.insideColour;
// }
//
// public Colour borderColour() {
// return this.borderColour;
// }
//
// public ItemSelectionFrame itemSelector() {
// return this.itemSelector;
// }
//
// public DrawableMuseRect border() {
// return this.border;
// }
//
// public ClickableSlider rslider() {
// return this.rslider;
// }
//
// public ClickableSlider gslider() {
// return this.gslider;
// }
//
// public ClickableSlider bslider() {
// return this.bslider;
// }
//
//
//
// public Option<ClickableSlider> selectedSlider() {
// return this.selectedSlider;
// }
//
// public void selectedSlider_$eq(final Option<ClickableSlider> x$1) {
// this.selectedSlider = x$1;
// }
//
// public int selectedColour() {
// return this.selectedColour;
// }
//
// public void selectedColour_$eq(final int x$1) {
// this.selectedColour = x$1;
// }
//
// public int decrAbove() {
// return this.decrAbove;
// }
//
// public void decrAbove_$eq(final int x$1) {
// this.decrAbove = x$1;
// }
//
// public Option<NBTTagIntArray> getOrCreateColourTag() {
// if (this.itemSelector().getSelectedItem() == null) {
// return (Option<NBTTagIntArray>)None$.MODULE$;
// }
// final NBTTagCompound renderSpec = MuseItemUtils.getMuseRenderTag(this.itemSelector().getSelectedItem().getItem());
// Some some;
// if (renderSpec.hasKey("colours") && renderSpec.getTag("colours") instanceof NBTTagIntArray) {
// some = new Some((Object)renderSpec.getTag("colours"));
// }
// else {
// final Item item = this.itemSelector().getSelectedItem().getItem().getItem();
// if (item instanceof ItemPowerArmor) {
// final ItemPowerArmor itemPowerArmor = (ItemPowerArmor)item;
// final int[] intArray = { itemPowerArmor.getColorFromItemStack(this.itemSelector().getSelectedItem().getItem()).getInt(), itemPowerArmor.getGlowFromItemStack(this.itemSelector().getSelectedItem().getItem()).getInt() };
// renderSpec.setIntArray("colours", intArray);
// final BoxedUnit unit = BoxedUnit.UNIT;
// }
// else {
// final int[] intArray2 = (int[])Array$.MODULE$.empty(ClassTag$.MODULE$.Int());
// renderSpec.setIntArray("colours", intArray2);
// final BoxedUnit unit2 = BoxedUnit.UNIT;
// }
// final EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
// if (player.worldObj.isRemote) {
// PacketSender$.MODULE$.sendToServer(new MusePacketColourInfo((EntityPlayer)player, this.itemSelector().getSelectedItem().inventorySlot, this.colours()));
// }
// some = new Some((Object)renderSpec.getTag("colours"));
// }
// return (Option<NBTTagIntArray>)some;
// }
//
// public Option<NBTTagIntArray> setColourTagMaybe(final int[] newarray) {
// if (this.itemSelector().getSelectedItem() == null) {
// return (Option<NBTTagIntArray>)None$.MODULE$;
// }
// final NBTTagCompound renderSpec = MuseItemUtils.getMuseRenderTag(this.itemSelector().getSelectedItem().getItem());
// renderSpec.setTag("colours", (NBTBase)new NBTTagIntArray(newarray));
// final EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
// if (player.worldObj.isRemote) {
// PacketSender$.MODULE$.sendToServer(new MusePacketColourInfo((EntityPlayer)player, this.itemSelector().getSelectedItem().inventorySlot, this.colours()));
// }
// return (Option<NBTTagIntArray>)new Some((Object)renderSpec.getTag("colours"));
// }
//
// public Buffer<Object> importColours() {
// final Buffer colours = (Buffer)Buffer$.MODULE$.empty();
// return (Buffer<Object>)colours;
// }
//
// public void refreshColours() {
// }
//
// @Override
// public void onMouseUp(final double x, final double y, final int button) {
// this.selectedSlider_$eq((Option<ClickableSlider>)None$.MODULE$);
// }
//
// @Override
// public void update(final double mousex, final double mousey) {
// this.selectedSlider().foreach((Function1)new ColourPickerFrame$$anonfun$update.ColourPickerFrame$$anonfun$update$1(this, mousex));
// }
//
// @Override
// public void draw() {
// this.border().draw();
// this.rslider().draw();
// this.gslider().draw();
// this.bslider().draw();
// Predef$.MODULE$.intArrayOps(this.colours()).indices().foreach((Function1)new ColourPickerFrame$$anonfun$draw.ColourPickerFrame$$anonfun$draw$1(this));
// new GuiIcons.ArmourColourPatch(this.border().left() + 8 + Predef$.MODULE$.intArrayOps(this.colours()).size() * 8, this.border().bottom() - 16, Colour.WHITE, null, null, null, null);
// new GuiIcons.SelectedArmorOverlay(this.border().left() + 8 + this.selectedColour() * 8, this.border().bottom() - 16, Colour.WHITE, null, null, null, null);
// new GuiIcons.MinusSign(this.border().left() + 8 + this.selectedColour() * 8, this.border().bottom() - 24, Colour.RED, null, null, null, null);
// new GuiIcons.PlusSign(this.border().left() + 8 + Predef$.MODULE$.intArrayOps(this.colours()).size() * 8, this.border().bottom() - 16, Colour.GREEN, null, null, null, null);
// }
//
// @Override
// public List<String> getToolTip(final int x, final int y) {
// return null;
// }
//
// public void onSelectColour(final int i) {
// final Colour c = new Colour(this.colours()[i]);
// this.rslider().setValue(c.r);
// this.gslider().setValue(c.g);
// this.bslider().setValue(c.b);
// this.selectedColour_$eq(i);
// }
//
//
// public int[] getIntArray(final NBTTagIntArray e) {
// return e.func_150302_c();
// }
//
//
//}
//
//public class ColourPickerFrame
//
//
// public MuseRect borderRef() {
// return this.borderRef;
// }
//
// public Colour insideColour() {
// return this.insideColour;
// }
//
// public Colour borderColour() {
// return this.borderColour;
// }
//
// public ItemSelectionFrame itemSelector() {
// return this.itemSelector;
// }
//
// public DrawableMuseRect border() {
// return this.border;
// }
//
// public ClickableSlider rslider() {
// return this.rslider;
// }
//
// public ClickableSlider gslider() {
// return this.gslider;
// }
//
// public ClickableSlider bslider() {
// return this.bslider;
// }
//
//
//
// public Option<ClickableSlider> selectedSlider() {
// return this.selectedSlider;
// }
//
// public void selectedSlider_$eq(Option<ClickableSlider> x$1) {
// this.selectedSlider = x$1;
// }
//
// public int selectedColour() {
// return this.selectedColour;
// }
//
// public void selectedColour_$eq(int x$1) {
// this.selectedColour = x$1;
// }
//
// public int decrAbove() {
// return this.decrAbove;
// }
//
// public void decrAbove_$eq(int x$1) {
// this.decrAbove = x$1;
// }
//
// public Option<NBTTagIntArray> getOrCreateColourTag() {
// Some some;
// if (this.itemSelector().getSelectedItem() == null) {
// return None..MODULE$;
// }
// NBTTagCompound renderSpec = MuseItemUtils.getMuseRenderTag(this.itemSelector().getSelectedItem().getItem());
// if (renderSpec.hasKey("colours") && renderSpec.getTag("colours") instanceof NBTTagIntArray) {
// some = new Some((Object)((NBTTagIntArray)renderSpec.getTag("colours")));
// } else {
// Item item = this.itemSelector().getSelectedItem().getItem().getItem();
// if (item instanceof ItemPowerArmor) {
// ItemPowerArmor itemPowerArmor = (ItemPowerArmor)item;
// int[] intArray = new int[]{itemPowerArmor.getColorFromItemStack(this.itemSelector().getSelectedItem().getItem()).getInt(), itemPowerArmor.getGlowFromItemStack(this.itemSelector().getSelectedItem().getItem()).getInt()};
// renderSpec.setIntArray("colours", intArray);
// BoxedUnit boxedUnit = BoxedUnit.UNIT;
// } else {
// int[] intArray = (int[])Array..MODULE$.empty(ClassTag..MODULE$.Int());
// renderSpec.setIntArray("colours", intArray);
// BoxedUnit boxedUnit = BoxedUnit.UNIT;
// }
// EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
// if (player.worldObj.isRemote) {
// PacketSender$.MODULE$.sendToServer(new MusePacketColourInfo((EntityPlayer)player, this.itemSelector().getSelectedItem().inventorySlot, this.colours()));
// }
// some = new Some((Object)((NBTTagIntArray)renderSpec.getTag("colours")));
// }
// return some;
// }
//
// public Option<NBTTagIntArray> setColourTagMaybe(int[] newarray) {
// if (this.itemSelector().getSelectedItem() == null) {
// return None..MODULE$;
// }
// NBTTagCompound renderSpec = MuseItemUtils.getMuseRenderTag(this.itemSelector().getSelectedItem().getItem());
// renderSpec.setTag("colours", (NBTBase)new NBTTagIntArray(newarray));
// EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
// if (player.worldObj.isRemote) {
// PacketSender$.MODULE$.sendToServer(new MusePacketColourInfo((EntityPlayer)player, this.itemSelector().getSelectedItem().inventorySlot, this.colours()));
// }
// return new Some((Object)((NBTTagIntArray)renderSpec.getTag("colours")));
// }
//
// public Buffer<Object> importColours() {
// Buffer colours2 = (Buffer)Buffer..MODULE$.empty();
// return colours2;
// }
//
// public void refreshColours() {
// }
//
// @Override
// public void onMouseUp(double x, double y, int button) {
// this.selectedSlider_$eq((Option<ClickableSlider>)None..MODULE$);
// }
//
// @Override
// public void update(double mousex, double mousey) {
// this.selectedSlider().foreach((Function1)new scala.Serializable(this, mousex){
// private final /* synthetic */ ColourPickerFrame $outer;
// private final double mousex$1;
//
// public final void apply(ClickableSlider s) {
// s.setValueByX(this.mousex$1);
// if (Predef..MODULE$.intArrayOps(this.$outer.colours()).size() > this.$outer.selectedColour()) {
// this.$outer.colours()[this.$outer.selectedColour()] = Colour.getInt(this.$outer.rslider().value(), this.$outer.gslider().value(), this.$outer.bslider().value(), 1.0);
// EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
// if (player.worldObj.isRemote) {
// PacketSender$.MODULE$.sendToServer(new MusePacketColourInfo((EntityPlayer)player, this.$outer.itemSelector().getSelectedItem().inventorySlot, this.$outer.colours()));
// }
// }
// }
// });
// }
//
// @Override
// public void draw() {
// this.border().draw();
// this.rslider().draw();
// this.gslider().draw();
// this.bslider().draw();
// Predef..MODULE$.intArrayOps(this.colours()).indices().foreach((Function1)new scala.Serializable(this){
// private final /* synthetic */ ColourPickerFrame $outer;
//
// public final GuiIcons.ArmourColourPatch apply(int i) {
// return new GuiIcons.ArmourColourPatch(this.$outer.border().left() + (double)8 + (double)(i * 8), this.$outer.border().bottom() - (double)16, new Colour(this.$outer.colours()[i]), null, null, null, null);
// }
// });
// new GuiIcons.ArmourColourPatch(this.border().left() + (double)8 + (double)(Predef..MODULE$.intArrayOps(this.colours()).size() * 8), this.border().bottom() - (double)16, Colour.WHITE, null, null, null, null);
// new GuiIcons.SelectedArmorOverlay(this.border().left() + (double)8 + (double)(this.selectedColour() * 8), this.border().bottom() - (double)16, Colour.WHITE, null, null, null, null);
// new GuiIcons.MinusSign(this.border().left() + (double)8 + (double)(this.selectedColour() * 8), this.border().bottom() - (double)24, Colour.RED, null, null, null, null);
// new GuiIcons.PlusSign(this.border().left() + (double)8 + (double)(Predef..MODULE$.intArrayOps(this.colours()).size() * 8), this.border().bottom() - (double)16, Colour.GREEN, null, null, null, null);
// }
//
// @Override
// public List<String> getToolTip(int x, int y) {
// return null;
// }
//
// public void onSelectColour(int i) {
// Colour c = new Colour(this.colours()[i]);
// this.rslider().setValue(c.r);
// this.gslider().setValue(c.g);
// this.bslider().setValue(c.b);
// this.selectedColour_$eq(i);
// }
//
//
// public int[] getIntArray(NBTTagIntArray e) {
// return e.func_150302_c();
// }
//
//
//}

View file

@ -17,9 +17,9 @@ import net.minecraft.util.StatCollector
import scala.collection.mutable
/**
* Author: MachineMuse (Claire Semple)
* Created: 4:19 AM, 03/05/13
*/
* Author: MachineMuse (Claire Semple)
* Created: 4:19 AM, 03/05/13
*/
class ColourPickerFrame(val borderRef: MuseRect, val insideColour: Colour, val borderColour: Colour, val itemSelector: ItemSelectionFrame) extends IGuiFrame {
val border = new DrawableMuseRect(borderRef, insideColour, borderColour)
val rslider: ClickableSlider = new ClickableSlider(new MusePoint2D(border.centerx, border.top + 8), border.width - 10, StatCollector.translateToLocal("gui.red"))
@ -153,7 +153,6 @@ class ColourPickerFrame(val borderRef: MuseRect, val insideColour: Colour, val b
})
}
}
def getIntArray(e:NBTTagIntArray) = e.func_150302_c()
}

View file

@ -3,8 +3,8 @@ package net.machinemuse.powersuits.client.render.item
import net.machinemuse.numina.general.MuseLogger
import net.machinemuse.powersuits.client.render.modelspec._
import net.minecraft.client.model.{ModelBiped, ModelRenderer}
import net.minecraft.entity.{Entity, EntityLivingBase}
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.entity.{Entity, EntityLivingBase}
import net.minecraft.item.{EnumAction, ItemStack}
import net.minecraft.nbt.NBTTagCompound
import net.minecraftforge.client.model.obj.WavefrontObject

View file

@ -0,0 +1,84 @@
//package net.machinemuse.powersuits.client.render.modelspec;
//
//import net.machinemuse.numina.scala.MuseRegistry;
//import net.minecraft.util.Vec3;
//import net.minecraftforge.client.model.obj.WavefrontObject;
//
///**
// * Author: MachineMuse (Claire Semple)
// * Created: 7:44 AM, 4/28/13
// *
// * Ported to Java by lehjr on 10/23/16.
// */
//public class ModelSpec extends MuseRegistry<ModelPartSpec> {
// private final WavefrontObject model;
// private final String[] textures;
// private final Vec3 offset;
// private final Vec3 rotation;
// private final String filename;
//
// public ModelSpec(final WavefrontObject model, final String[] textures, final Vec3 offset, final Vec3 rotation, final String filename) {
// this.model = model;
// this.textures = textures;
// this.offset = offset;
// this.rotation = rotation;
// this.filename = filename;
// }
//
//
//
//
//
//
//// class ModelSpec(val model: WavefrontObject,
//// val textures: Array[String],
//// val offset: Option[Vec3],
//// val rotation: Option[Vec3],
//// val filename: String
//// ) extends MuseRegistry[ModelPartSpec] {
//// def applyOffsetAndRotation() = {
//// // TODO: Implement
//// }
////
//// def getOwnName = {
//// ModelRegistry.getName(this).getOrElse("")
//// }
//// }
//
//
//
//
//
// public WavefrontObject model() {
// return this.model;
// }
//
// public String[] textures() {
// return this.textures;
// }
//
// public Vec3 offset() {
// return this.offset;
// }
//
// public Vec3 rotation() {
// return this.rotation;
// }
//
// public String filename() {
// return this.filename;
// }
//
// public void applyOffsetAndRotation() {
// }
//
// public String getOwnName() {
// return (ModelRegistry.getName(this.) != null) ? ModelRegistry.getName(this) : ("");
//
//
// return (String)((MuseBiMap<Object, T>)ModelRegistry$.MODULE$).getName((T)this).getOrElse((Function0)new ModelSpec$$anonfun$getOwnName.ModelSpec$$anonfun$getOwnName$1(this));
// }
//
//
//}
//

View file

@ -21,6 +21,10 @@ class RenderPart(base: ModelBase, val parent: ModelRenderer) extends ModelRender
val colours = renderSpec.getIntArray("colours")
for {
/* rember null checks when porting this section to Java */
nbt <- NBTTagAccessor.getValues(renderSpec).asScala
part <- ModelRegistry.getPart(nbt)
if part.slot == ArmorModel.instance.visibleSection

View file

@ -5,7 +5,7 @@ import java.net.URL
import cpw.mods.fml.client.registry.{ClientRegistry, RenderingRegistry}
import cpw.mods.fml.common.FMLCommonHandler
import net.machinemuse.general.sound.SoundDictionary
import net.machinemuse.numina.network.{MusePacket, MusePacketHandler, MusePacketModeChangeRequest, PacketSender}
import net.machinemuse.numina.network.{MusePacket, MusePacketModeChangeRequest, PacketSender}
import net.machinemuse.numina.render.RenderGameOverlayEventHandler
import net.machinemuse.powersuits.block.{BlockTinkerTable, TileEntityLuxCapacitor, TileEntityTinkerTable}
import net.machinemuse.powersuits.client.render.block.{RenderLuxCapacitorTESR, TinkerTableRenderer}
@ -79,7 +79,7 @@ class ClientProxy extends CommonProxy {
FMLCommonHandler.instance.bus.register(new KeybindKeyHandler)
MinecraftForge.EVENT_BUS.register(new PlayerUpdateHandler)
FMLCommonHandler.instance.bus.register(new ClientTickHandler)
val packetHandler: MusePacketHandler.type = MusePacketHandler
// val packetHandler: MusePacketHandler.type = MusePacketHandler
}
override def postInit() {
@ -97,7 +97,7 @@ class ClientProxy extends CommonProxy {
class ServerProxy extends CommonProxy {
override def registerEvents {
FMLCommonHandler.instance().bus().register(PlayerLoginHandlerThingy)
FMLCommonHandler.instance().bus().register(new PlayerLoginHandlerThingy)
}
override def registerHandlers() {

View file

@ -1,250 +0,0 @@
package net.machinemuse.powersuits.event
import java.util
import cpw.mods.fml.common.eventhandler.SubscribeEvent
import cpw.mods.fml.common.gameevent.TickEvent
import cpw.mods.fml.common.gameevent.TickEvent.{ClientTickEvent, RenderTickEvent}
import net.machinemuse.api.ModuleManager
import net.machinemuse.general.gui.{EnergyMeter, HeatMeter, WaterMeter}
import net.machinemuse.numina.network.{MusePacket, PacketSender}
import net.machinemuse.powersuits.block.BlockTinkerTable
import net.machinemuse.powersuits.common.Config
import net.machinemuse.powersuits.control.{KeybindManager, PlayerInputMap}
import net.machinemuse.powersuits.item.{ItemPowerArmorChestplate, ItemPowerArmorHelmet, ItemPowerFist}
import net.machinemuse.powersuits.network.packets.MusePacketPlayerUpdate
import net.machinemuse.powersuits.powermodule.armor.WaterTankModule
import net.machinemuse.powersuits.powermodule.misc.{AutoFeederModule, ClockModule, CompassModule}
import net.machinemuse.utils.render.MuseRenderer
import net.machinemuse.utils._
import net.minecraft.client.Minecraft
import net.minecraft.client.entity.EntityClientPlayerMP
import net.minecraft.client.gui.ScaledResolution
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.init.Items
import net.minecraft.item.ItemStack
class ClientTickHandler {
/**
* This handler is called before/after the game processes input events and
* updates the gui state mainly. *independent of rendering, so don't do rendering here
* -is also the parent class of KeyBindingHandler
*
* @author MachineMuse
*/
@SubscribeEvent def onPreClientTick(event: ClientTickEvent) {
if (event.phase == TickEvent.Phase.START) {
import scala.collection.JavaConversions._
for (kb <- KeybindManager.getKeybindings) {
kb.doToggleTick()
}
}
else {
val player: EntityClientPlayerMP = Minecraft.getMinecraft.thePlayer
if (player != null && MuseItemUtils.getModularItemsInInventory(player).size > 0) {
val inputmap: PlayerInputMap = PlayerInputMap.getInputMapFor(player.getCommandSenderName)
inputmap.forwardKey = Math.signum(player.movementInput.moveForward)
inputmap.strafeKey = Math.signum(player.movementInput.moveStrafe)
inputmap.jumpKey = player.movementInput.jump
inputmap.sneakKey = player.movementInput.sneak
inputmap.motionX = player.motionX
inputmap.motionY = player.motionY
inputmap.motionZ = player.motionZ
if (inputmap.hasChanged) {
inputmap.refresh()
val inputPacket: MusePacket = new MusePacketPlayerUpdate(player, inputmap)
PacketSender.sendToServer(inputPacket)
}
}
}
}
var modules: util.ArrayList[String] = _
def findInstalledModules(player: EntityPlayer) {
if (player != null) {
val tool = player.getCurrentEquippedItem
if (tool != null && tool.getItem.isInstanceOf[ItemPowerFist]) {
}
val helmet = player.getCurrentArmor(3)
if (helmet != null && helmet.getItem.isInstanceOf[ItemPowerArmorHelmet]) {
if (ModuleManager.itemHasActiveModule(helmet, AutoFeederModule.MODULE_AUTO_FEEDER)) {
modules.add(AutoFeederModule.MODULE_AUTO_FEEDER)
}
if (ModuleManager.itemHasActiveModule(helmet, ClockModule.MODULE_CLOCK)) {
modules.add(ClockModule.MODULE_CLOCK)
}
if (ModuleManager.itemHasActiveModule(helmet, CompassModule.MODULE_COMPASS)) {
modules.add(CompassModule.MODULE_COMPASS)
}
}
val chest = player.getCurrentArmor(2)
if (chest != null &&
chest.getItem.isInstanceOf[ItemPowerArmorChestplate]) {
if (ModuleManager.itemHasActiveModule(chest, WaterTankModule.MODULE_WATER_TANK)) {
modules.add(WaterTankModule.MODULE_WATER_TANK)
}
}
}
}
var yBaseIcon: Double = _
var yBaseString: Int = _
if (Config.useGraphicalMeters) {
yBaseIcon = 150.0
yBaseString = 155
} else {
yBaseIcon = 26.0
yBaseString = 32
}
var food: ItemStack = new ItemStack(Items.cooked_beef)
var clock: ItemStack = new ItemStack(Items.clock)
var compass: ItemStack = new ItemStack(Items.compass)
var yOffsetIcon: Double = 16.0
var yOffsetString: Int = 18
var ampm: String = ""
var drawWaterMeter: Boolean = false
//@SideOnly(Side.CLIENT) // MPSA - is this needed or not?
@SubscribeEvent def onRenderTickEvent(event: RenderTickEvent) {
if (event.phase == TickEvent.Phase.END) {
val player: EntityPlayer = Minecraft.getMinecraft.thePlayer
modules = new util.ArrayList[String]()
findInstalledModules(player)
if (player != null && MuseItemUtils.modularItemsEquipped(player).size > 0 && Minecraft.getMinecraft.currentScreen == null) {
val mc: Minecraft = Minecraft.getMinecraft
val screen: ScaledResolution = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight)
for (i <- 0 until modules.size) {
if (modules.get(i) == AutoFeederModule.MODULE_AUTO_FEEDER) {
val foodLevel = MuseItemUtils.getFoodLevel(player.getCurrentArmor(3)).toInt
val num = MuseStringUtils.formatNumberShort(foodLevel)
if (i == 0) {
MuseRenderer.drawString(num, 17, yBaseString)
MuseRenderer.drawItemAt(-1.0, yBaseIcon, food)
} else {
MuseRenderer.drawString(num, 17, yBaseString + (yOffsetString * i))
MuseRenderer.drawItemAt(-1.0, yBaseIcon + (yOffsetIcon * i), food)
}
} else if (modules.get(i) == ClockModule.MODULE_CLOCK) {
val time = player.worldObj.provider.getWorldTime
var hour = ((time % 24000) / 1000).toInt
if (Config.use24hClock) {
if (hour < 19) {
hour += 6
} else {
hour -= 18
}
ampm = "h"
} else {
if (hour < 6) {
hour += 6
ampm = " AM"
} else if (hour == 6) {
hour = 12
ampm = " PM"
} else if (hour > 6 && hour < 18) {
hour -= 6
ampm = " PM"
} else if (hour == 18) {
hour = 12
ampm = " AM"
} else {
hour -= 18
ampm = " AM"
}
}
if (i == 0) {
MuseRenderer.drawString(hour + ampm, 17, yBaseString)
MuseRenderer.drawItemAt(-1.0, yBaseIcon, clock)
} else {
MuseRenderer.drawString(hour + ampm, 17, yBaseString + (yOffsetString * i))
MuseRenderer.drawItemAt(-1.0, yBaseIcon + (yOffsetIcon * i), clock)
}
} else if (modules.get(i) == CompassModule.MODULE_COMPASS) {
if (i == 0) {
MuseRenderer.drawItemAt(-1.0, yBaseIcon, compass)
} else {
MuseRenderer.drawItemAt(-1.0, yBaseIcon + (yOffsetIcon * i), compass)
}
} else if (modules.get(i) == WaterTankModule.MODULE_WATER_TANK) {
drawWaterMeter = true
}
}
drawMeters(player, screen)
}
}
}
protected var heat: HeatMeter = null
protected var energy: HeatMeter = null
protected var water : WaterMeter = null
private var lightningCounter: Int = 0
private def drawMeters(player: EntityPlayer, screen: ScaledResolution) {
val currEnergy: Double = ElectricItemUtils.getPlayerEnergy(player)
val maxEnergy: Double = ElectricItemUtils.getMaxEnergy(player)
val currHeat: Double = MuseHeatUtils.getPlayerHeat(player)
val maxHeat: Double = MuseHeatUtils.getMaxHeat(player)
val currWater = AddonWaterUtils.getPlayerWater(player)
val maxWater = AddonWaterUtils.getMaxWater(player)
val left: Double = screen.getScaledWidth - 30
val top: Double = screen.getScaledHeight / 2.0 - 16
// Heat Meter
val currHeatStr: String = MuseStringUtils.formatNumberShort(currHeat)
val maxHeatStr: String = MuseStringUtils.formatNumberShort(maxHeat)
if (Config.useGraphicalMeters) {
if (heat == null) {
heat = new HeatMeter
}
heat.draw(left + 8, top, currHeat / maxHeat)
MuseRenderer.drawRightAlignedString(currHeatStr, left - 2, top + 20)
}
else {
MuseRenderer.drawString(currHeatStr + '/' + maxHeatStr + " C", 1, 10)
}
// Energy Meter
if (maxEnergy > 0 && BlockTinkerTable.energyIcon != null) {
val currEnergyStr: String = MuseStringUtils.formatNumberShort(currEnergy)
val maxEnergyStr: String = MuseStringUtils.formatNumberShort(maxEnergy)
if (Config.useGraphicalMeters) {
if (energy == null) {
energy = new EnergyMeter
}
energy.draw(left, top, currEnergy / maxEnergy)
MuseRenderer.drawRightAlignedString(currEnergyStr, left - 2, top + 10)
}
else {
MuseRenderer.drawString(currEnergyStr + '/' + maxEnergyStr + " \u1D60", 1, 1)
}
}
// Water Meter
if (maxWater > 0 && drawWaterMeter ) {
val currWaterStr: String = MuseStringUtils.formatNumberShort(currWater)
val maxWaterStr: String = MuseStringUtils.formatNumberShort(maxWater)
if (Config.useGraphicalMeters) {
if (water == null) {
water = new WaterMeter()
}
val left: Double = screen.getScaledWidth - 30
val top: Double = screen.getScaledHeight / 2.0 - 16
water.draw(left + 16, top, currWater / maxWater)
MuseRenderer.drawRightAlignedString(currWaterStr, left - 2, top + 30)
}
else {
MuseRenderer.drawString(currWaterStr + '/' + maxWaterStr + " buckets", 1, 19)
}
}
}
}

View file

@ -1,22 +0,0 @@
package net.machinemuse.powersuits.event
import cpw.mods.fml.common.eventhandler.SubscribeEvent
import cpw.mods.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent
import net.machinemuse.numina.network.PacketSender
import net.machinemuse.powersuits.network.packets.MusePacketPropertyModifierConfig
import net.minecraft.entity.player.EntityPlayerMP
/**
* Author: MachineMuse (Claire Semple)
* Created: 8:01 PM, 12/05/13
*/
object PlayerLoginHandlerThingy {
@SubscribeEvent
def onPlayerLogin(e: PlayerLoggedInEvent) {
val player = e.player
PacketSender.sendTo(
new MusePacketPropertyModifierConfig(player, null),
player.asInstanceOf[EntityPlayerMP]
)
}
}

View file

@ -1,93 +0,0 @@
package net.machinemuse.powersuits.event
import cpw.mods.fml.common.FMLCommonHandler
import cpw.mods.fml.common.eventhandler.SubscribeEvent
import cpw.mods.fml.relauncher.Side
import net.machinemuse.api.ModuleManager
import net.machinemuse.general.sound.SoundDictionary
import net.machinemuse.numina.basemod.NuminaConfig
import net.machinemuse.numina.general.MuseMathUtils
import net.machinemuse.numina.sound.Musique
import net.machinemuse.powersuits.common.Config
import net.machinemuse.utils.{MuseHeatUtils, MuseItemUtils, MusePlayerUtils}
import net.minecraft.entity.player.EntityPlayer
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent
/**
* Created by Claire Semple on 9/8/2014.
*/
class PlayerUpdateHandler {
@SubscribeEvent
def onPlayerUpdate(e: LivingUpdateEvent) = {
e.entity match {
case player: EntityPlayer => {
val modularItemsEquipped = MuseItemUtils.modularItemsEquipped(player)
val totalWeight: Double = MuseItemUtils.getPlayerWeight(player)
val weightCapacity: Double = Config.getWeightCapacity
import scala.collection.JavaConversions._
for (stack <- modularItemsEquipped) {
if (stack.getTagCompound.hasKey("ench")) {
stack.getTagCompound.removeTag("ench")
}
}
var foundItemWithModule: Boolean = false
import scala.collection.JavaConversions._
for (module <- ModuleManager.getPlayerTickModules) {
foundItemWithModule = false
import scala.collection.JavaConversions._
for (itemStack <- modularItemsEquipped) {
if (module.isValidForItem(itemStack)) {
if (ModuleManager.itemHasActiveModule(itemStack, module.getDataName)) {
module.onPlayerTickActive(player, itemStack)
foundItemWithModule = true
}
}
}
if (!foundItemWithModule) {
import scala.collection.JavaConversions._
for (itemStack <- modularItemsEquipped) {
module.onPlayerTickInactive(player, itemStack)
}
}
}
val foundItem: Boolean = modularItemsEquipped.size > 0
if (foundItem) {
player.fallDistance = MovementManager.computeFallHeightFromVelocity(MuseMathUtils.clampDouble(player.motionY, -1000.0, 0.0)).asInstanceOf[Float]
if (totalWeight > weightCapacity) {
player.motionX *= weightCapacity / totalWeight
player.motionZ *= weightCapacity / totalWeight
}
MuseHeatUtils.coolPlayer(player, MusePlayerUtils.getPlayerCoolingBasedOnMaterial(player))
val maxHeat: Double = MuseHeatUtils.getMaxHeat(player)
val currHeat: Double = MuseHeatUtils.getPlayerHeat(player)
if (currHeat > maxHeat) {
player.attackEntityFrom(MuseHeatUtils.overheatDamage, Math.sqrt(currHeat - maxHeat).asInstanceOf[Int] / 4)
player.setFire(1)
}
else {
player.extinguish()
}
val velsq2: Double = MuseMathUtils.sumsq(player.motionX, player.motionY, player.motionZ) - 0.5
if ((FMLCommonHandler.instance.getEffectiveSide == Side.CLIENT) && NuminaConfig.useSounds) {
if (player.isAirBorne && velsq2 > 0) {
Musique.playerSound(player, SoundDictionary.SOUND_GLIDER, (velsq2 / 3).asInstanceOf[Float], 1.0f, true)
}
else {
Musique.stopPlayerSound(player, SoundDictionary.SOUND_GLIDER)
}
}
}
}
case _ =>
}
}
}

View file

@ -1,118 +0,0 @@
package net.machinemuse.powersuits.event
import cpw.mods.fml.common.eventhandler.SubscribeEvent
import cpw.mods.fml.relauncher.{Side, SideOnly}
import net.machinemuse.api.ModuleManager
import net.machinemuse.general.gui.clickable.{ClickableKeybinding, ClickableModule}
import net.machinemuse.numina.geometry.{Colour, DrawableMuseRect}
import net.machinemuse.numina.render.{MuseIconUtils, MuseTextureUtils}
import net.machinemuse.powersuits.common.Config
import net.machinemuse.powersuits.control.KeybindManager
import net.machinemuse.powersuits.powermodule.misc.BinocularsModule
import net.machinemuse.powersuits.powermodule.movement.{FlightControlModule, GliderModule, JetBootsModule, JetPackModule}
import net.machinemuse.utils.MuseItemUtils
import net.machinemuse.utils.render.MuseRenderer
import net.minecraft.client.Minecraft
import net.minecraft.client.gui.ScaledResolution
import net.minecraft.entity.player.EntityPlayer
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType
import net.minecraftforge.client.event._
object RenderEventHandler {
private[event] var ownFly: Boolean = false
}
class RenderEventHandler {
@SideOnly(Side.CLIENT)
@SubscribeEvent def renderLast(event: RenderWorldLastEvent) {
val mc: Minecraft = Minecraft.getMinecraft
val screen: ScaledResolution = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight)
}
@SubscribeEvent def onTextureStitch(event: TextureStitchEvent.Post) {
}
@SubscribeEvent def onPreRenderPlayer(event: RenderPlayerEvent.Pre) {
if (!event.entityPlayer.capabilities.isFlying && !event.entityPlayer.onGround && playerHasFlightOn(event.entityPlayer)) {
event.entityPlayer.capabilities.isFlying = true
RenderEventHandler.ownFly = true
}
}
private def playerHasFlightOn(player: EntityPlayer): Boolean = {
return ModuleManager.itemHasActiveModule(player.getCurrentArmor(2), JetPackModule.MODULE_JETPACK) || ModuleManager.itemHasActiveModule(player.getCurrentArmor(2), GliderModule.MODULE_GLIDER) || ModuleManager.itemHasActiveModule(player.getCurrentArmor(0), JetBootsModule.MODULE_JETBOOTS) || ModuleManager.itemHasActiveModule(player.getCurrentArmor(3), FlightControlModule.MODULE_FLIGHT_CONTROL)
}
@SubscribeEvent def onPostRenderPlayer(event: RenderPlayerEvent.Post) {
if (RenderEventHandler.ownFly) {
RenderEventHandler.ownFly = false
event.entityPlayer.capabilities.isFlying = false
}
}
@SubscribeEvent def onFOVUpdate(e: FOVUpdateEvent) {
val helmet = e.entity.getCurrentArmor(3)
if (ModuleManager.itemHasActiveModule(helmet, "Binoculars")) {
e.newfov = e.newfov / ModuleManager.computeModularProperty(helmet, BinocularsModule.FOV_MULTIPLIER).toFloat
}
}
@SubscribeEvent def onPostRenderGameOverlayEvent(e: RenderGameOverlayEvent.Post) {
e.`type` match {
// case ElementType.ALL =>
// case ElementType.HELMET =>
// case ElementType.PORTAL =>
// case ElementType.CROSSHAIRS =>
// case ElementType.BOSSHEALTH =>
// case ElementType.ARMOR =>
// case ElementType.HEALTH =>
// case ElementType.FOOD =>
// case ElementType.AIR =>
case ElementType.HOTBAR => drawKeybindToggles()
// case ElementType.EXPERIENCE =>
// case ElementType.TEXT =>
// case ElementType.HEALTHMOUNT =>
// case ElementType.JUMPBAR =>
case _ =>
}
}
val frame = new DrawableMuseRect(Config.keybindHUDx, Config.keybindHUDy, Config.keybindHUDx + 16, Config.keybindHUDy + 16, true, Colour.DARKGREEN.withAlpha(0.2), Colour.GREEN.withAlpha(0.2))
def drawKeybindToggles(): Unit = {
if(Config.keybindHUDon)
for {
mc <- Option(Minecraft.getMinecraft)
player <- Option(mc.thePlayer)
} {
val screen = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight)
frame.setLeft(Config.keybindHUDx)
frame.setTop(Config.keybindHUDy)
frame.setBottom(frame.top() + 16)
import scala.collection.JavaConverters._
for (kb: ClickableKeybinding <- KeybindManager.getKeybindings.asScala) {
if (kb.displayOnHUD) {
val stringwidth = MuseRenderer.getStringWidth(kb.getLabel)
frame.setWidth(stringwidth + kb.getBoundModules.size() * 16)
frame.draw()
MuseRenderer.drawString(kb.getLabel, frame.left()+1, frame.top()+3, if (kb.toggleval) Colour.RED else Colour.GREEN)
var x = frame.left() + stringwidth
for (module: ClickableModule <- kb.getBoundModules.asScala) {
MuseTextureUtils.pushTexture(module.getModule.getStitchedTexture(null))
var active = false
for (stack <- MuseItemUtils.modularItemsEquipped(player).asScala)
if (ModuleManager.itemHasActiveModule(stack, module.getModule.getDataName))
active = true
MuseIconUtils.drawIconAt(x, frame.top, module.getModule.getIcon(null), if (active) Colour.WHITE else Colour.DARKGREY.withAlpha(0.5))
MuseTextureUtils.popTexture()
x += 16
}
frame.setTop(frame.top() + 16)
frame.setBottom(frame.top() + 16)
}
}
}
}
}

View file

@ -1,24 +0,0 @@
package net.machinemuse.powersuits.item
import cpw.mods.fml.common.Optional
import cpw.mods.fml.relauncher.{Side, SideOnly}
import ic2.api.item.IMetalArmor
import net.machinemuse.utils.render.MuseRenderer
import net.minecraft.client.renderer.texture.IIconRegister
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.item.ItemStack
@Optional.InterfaceList (Array(
new Optional.Interface (iface = "ic2.api.item.IMetalArmor", modid = "IC2", striprefs = true)
) )
class ItemPowerArmorBoots extends ItemPowerArmor(0, 3) with IMetalArmor{
val iconpath = MuseRenderer.ICON_PREFIX + "armorfeet"
setUnlocalizedName("powerArmorBoots")
@SideOnly(Side.CLIENT) override def registerIcons(iconRegister: IIconRegister) {
itemIcon = iconRegister.registerIcon(iconpath)
}
override def isMetalArmor(itemStack: ItemStack, entityPlayer: EntityPlayer): Boolean = true
}

View file

@ -1,15 +0,0 @@
package net.machinemuse.powersuits.item
import cpw.mods.fml.relauncher.{Side, SideOnly}
import net.machinemuse.utils.render.MuseRenderer
import net.minecraft.client.renderer.texture.IIconRegister
class ItemPowerArmorChestplate extends ItemPowerArmor(0, 1) {
val iconpath = MuseRenderer.ICON_PREFIX + "armortorso"
setUnlocalizedName("powerArmorChestplate")
@SideOnly(Side.CLIENT) override def registerIcons(iconRegister: IIconRegister) {
itemIcon = iconRegister.registerIcon(iconpath)
}
}

View file

@ -1,58 +0,0 @@
package net.machinemuse.powersuits.item
import cpw.mods.fml.common.Optional
import cpw.mods.fml.relauncher.{Side, SideOnly}
import forestry.api.core.IArmorNaturalist
import micdoodle8.mods.galacticraft.api.item.IBreathableArmor
import micdoodle8.mods.galacticraft.api.item.IBreathableArmor.EnumGearType
import net.machinemuse.api.ModuleManager
import net.machinemuse.powersuits.powermodule.armor.ApiaristArmorModule
import net.machinemuse.powersuits.powermodule.misc.{AirtightSealModule, ThaumGogglesModule}
import net.machinemuse.utils.render.MuseRenderer
import net.minecraft.client.renderer.texture.IIconRegister
import net.minecraft.entity.EntityLivingBase
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.item.ItemStack
import thaumcraft.api.IGoggles
import thaumcraft.api.nodes.IRevealer
@Optional.InterfaceList (Array(
new Optional.Interface (iface = "forestry.api.core.IArmorNaturalist", modid = "Forestry", striprefs = true),
new Optional.Interface (iface = "thaumcraft.api.IGoggles", modid = "Thaumcraft", striprefs = true),
new Optional.Interface (iface = "thaumcraft.api.nodes.IRevealer", modid = "Thaumcraft", striprefs = true),
new Optional.Interface (iface = "micdoodle8.mods.galacticraft.api.item.IBreathableArmor", modid = "GalacticraftCore", striprefs = true)
))
class ItemPowerArmorHelmet extends ItemPowerArmor(0, 0)
with IArmorNaturalist
with IBreathableArmor
with IGoggles
with IRevealer {
val iconpath = MuseRenderer.ICON_PREFIX + "armorhead"
setUnlocalizedName("powerArmorHelmet")
@SideOnly(Side.CLIENT)
override def registerIcons(iconRegister: IIconRegister) {
itemIcon = iconRegister.registerIcon(iconpath)
}
override def showIngamePopups(itemstack: ItemStack, player: EntityLivingBase): Boolean =
ModuleManager.itemHasActiveModule(itemstack, ThaumGogglesModule.MODULE_THAUM_GOGGLES)
override def showNodes(itemstack: ItemStack, player: EntityLivingBase): Boolean =
ModuleManager.itemHasActiveModule(itemstack, ThaumGogglesModule.MODULE_THAUM_GOGGLES)
@Optional.Method(modid = "Forestry")
override def canSeePollination(player: EntityPlayer, helm: ItemStack, doSee: Boolean): Boolean = {
ModuleManager.itemHasActiveModule(helm, ApiaristArmorModule.MODULE_APIARIST_ARMOR)
}
@Optional.Method(modid = "GalacticraftCore")
override def handleGearType(geartype: EnumGearType): Boolean = {
geartype == EnumGearType.HELMET
}
@Optional.Method(modid = "GalacticraftCore")
override def canBreathe(helm: ItemStack, player: EntityPlayer, geartype: EnumGearType): Boolean =
ModuleManager.itemHasActiveModule(helm, AirtightSealModule.AIRTIGHT_SEAL_MODULE)
}

View file

@ -1,17 +0,0 @@
package net.machinemuse.powersuits.item
import cpw.mods.fml.relauncher.{Side, SideOnly}
import net.machinemuse.utils.render.MuseRenderer
import net.minecraft.client.renderer.texture.IIconRegister
class ItemPowerArmorLeggings extends ItemPowerArmor(0, 2) {
val iconpath = MuseRenderer.ICON_PREFIX + "armorlegs"
setUnlocalizedName("powerArmorLeggings")
@SideOnly(Side.CLIENT)
override def registerIcons(iconRegister: IIconRegister) {
itemIcon = iconRegister.registerIcon(iconpath)
}
}

View file

@ -0,0 +1,430 @@
package net.machinemuse.powersuits.item;
import net.machinemuse.api.moduletrigger.IBlockBreakingModule;
import net.machinemuse.powersuits.common.Config;
import net.machinemuse.powersuits.common.Config$;
import net.machinemuse.general.gui.MuseIcon;
import scala.collection.mutable.StringBuilder;
import net.minecraft.item.Item;
import net.minecraft.entity.item.EntityMinecart;
import net.machinemuse.utils.MuseHeatUtils;
import net.machinemuse.powersuits.powermodule.tool.GrafterModule;
import net.machinemuse.api.IPowerModule;
import scala.reflect.Manifest;
import net.machinemuse.api.moduletrigger.IRightClickModule;
import scala.reflect.ManifestFactory$;
import net.machinemuse.numina.scala.OptionCast$;
import net.minecraft.item.EnumAction;
import net.minecraft.entity.Entity;
import scala.runtime.NonLocalReturnControl;
import scala.runtime.BoxedUnit;
import scala.Function1;
import java.util.List;
import scala.collection.JavaConversions$;
import net.minecraft.world.World;
import net.minecraft.util.Vec3;
import net.minecraft.util.DamageSource;
import net.machinemuse.utils.ElectricItemUtils;
import net.machinemuse.powersuits.powermodule.weapon.MeleeAssistModule;
import net.machinemuse.api.ModuleManager;
import net.machinemuse.powersuits.powermodule.tool.OmniWrenchModule;
import net.minecraft.entity.EntityLivingBase;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.block.Block;
import net.machinemuse.numina.item.ModeChangingItem;
import net.machinemuse.numina.item.ModeChangingItem$class;
import scala.collection.Seq;
import net.minecraft.util.IIcon;
import scala.Option;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import scala.reflect.ScalaSignature;
import cpw.mods.fml.common.Optional;
import mekanism.api.IMekWrench;
import crazypants.enderio.api.tool.ITool;
import com.bluepowermod.api.misc.IScrewdriver;
import buildcraft.api.tools.IToolWrench;
import appeng.api.implementations.items.IAEWrench;
import mods.railcraft.api.core.items.IToolCrowbar;
import powercrystals.minefactoryreloaded.api.IMFRHammer;
import cofh.api.item.IToolHammer;
import forestry.api.arboriculture.IToolGrafter;
/**
* Describes the modular power tool.
*
* @author MachineMuse
*
* Ported to Java by lehjr on 10/26/16.
*/
@Optional.InterfaceList({
@Optional.Interface(iface = "mekanism.api.IMekWrench", modid = "Mekanism", striprefs = true),
@Optional.Interface(iface = "crazypants.enderio.api.tool.ITool", modid = "EnderIO", striprefs = true),
@Optional.Interface(iface = "mrtjp.projectred.api.IScrewdriver", modid = "ProjRed|Core", striprefs = true),
@Optional.Interface(iface = "com.bluepowermod.api.misc.IScrewdriver", modid = "bluepower", striprefs = true),
@Optional.Interface(iface = "forestry.api.arboriculture.IToolGrafter", modid = "Forestry", striprefs = true),
@Optional.Interface(iface = "mods.railcraft.api.core.items.IToolCrowbar", modid = "Railcraft", striprefs = true),
@Optional.Interface(iface = "powercrystals.minefactoryreloaded.api.IMFRHammer", modid = "MineFactoryReloaded", striprefs = true),
@Optional.Interface(iface = "cofh.api.item.IToolHammer", modid = "CoFHCore", striprefs = true),
@Optional.Interface(iface = "buildcraft.api.tools.IToolWrench", modid = "BuildCraft|Core", striprefs = true),
@Optional.Interface(iface = "appeng.api.implementations.items.IAEWrench", modid = "appliedenergistics2", striprefs = true) })
public class ItemPowerFist extends ItemElectricTool implements IToolGrafter, IToolHammer, IMFRHammer, IToolCrowbar, IAEWrench, IToolWrench, IScrewdriver, mrtjp.projectred.api.IScrewdriver, ITool, IMekWrench, ModeChangingModularItem
{
private final String iconpath = MuseIcon.ICON_PREFIX + "handitem";
public ItemPowerFist() {
super(0.0f, Item.ToolMaterial.EMERALD);
// ModeChangingItem$class.$init$(this);
// ModeChangingModularItem$class.$init$(this);
this.setMaxStackSize(1);
this.setMaxDamage(0);
this.setCreativeTab(Config.getCreativeTab());
this.setUnlocalizedName("powerFist");
}
/**
* Returns the strength of the stack against a given block. 1.0F base,
* (Quality+1)*2 if correct blocktype, 1.5F if sword
*/
public float getStrVsBlock( ItemStack stack, Block block) {
return this.getStrVsBlock(stack, block, 0);
}
/**
* FORGE: Overridden to allow custom tool effectiveness
*/
public float getStrVsBlock(ItemStack stack, Block block, int meta) {
return 1.0f;
}
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister iconRegister) {
this.itemIcon = iconRegister.registerIcon(this.iconpath);
}
/**
* Current implementations of this method in child classes do not use the
* entry argument beside stack. They just raise the damage on the stack.
*/
@Override
public boolean hitEntity(ItemStack stack, EntityLivingBase entityBeingHit, EntityLivingBase entityDoingHitting) {
if (ModuleManager.itemHasActiveModule(stack, OmniWrenchModule.MODULE_OMNI_WRENCH)) {
entityBeingHit.rotationYaw += 90.0f;
entityBeingHit.rotationYaw %= 360.0f;
}
if (entityDoingHitting instanceof EntityPlayer && ModuleManager.itemHasActiveModule(stack, MeleeAssistModule.MODULE_MELEE_ASSIST)) {
EntityPlayer player = (EntityPlayer)entityDoingHitting;
double drain = ModuleManager.computeModularProperty(stack, MeleeAssistModule.PUNCH_ENERGY);
if (ElectricItemUtils.getPlayerEnergy(player) > drain) {
ElectricItemUtils.drainPlayerEnergy(player, drain);
double damage = ModuleManager.computeModularProperty(stack, MeleeAssistModule.PUNCH_DAMAGE);
double knockback = ModuleManager.computeModularProperty(stack, MeleeAssistModule.PUNCH_KNOCKBACK);
DamageSource damageSource = DamageSource.causePlayerDamage(player);
if (entityBeingHit.attackEntityFrom(damageSource, (float)(int)damage)) {
Vec3 lookVec = player.getLookVec();
entityBeingHit.addVelocity(lookVec.xCoord * knockback, Math.abs(lookVec.yCoord + 0.2f) * knockback, lookVec.zCoord * knockback);
}
}
}
return true;
}
/**
* Called when a block is destroyed using this tool.
* <p/>
* Returns: Whether to increment player use stats with this item
*/
@Override
public boolean onBlockDestroyed(ItemStack stack, World world, Block block, int x, int y, int z, EntityLivingBase entity) {
if (entity instanceof EntityPlayer) {
for (IBlockBreakingModule module : ModuleManager.getBlockBreakingModules()) {
if (ModuleManager.itemHasActiveModule(stack, module.getDataName())) {
if (module.onBlockDestroyed(stack, world, block, x, y, z, (EntityPlayer) entity)) {
return true;
}
}
}
}
return true;
}
/**
* An itemstack sensitive version of getDamageVsEntity - allows items to
* handle damage based on
* itemstack data, like tags. Falls back to getDamageVsEntity.
*
* @param par1Entity The entity being attacked (or the attacking mob, if it's a mob
* - vanilla bug?)
* @param itemStack The itemstack
* @return the damage
*/
public float getDamageVsEntity(Entity par1Entity, ItemStack itemStack) {
return (float)ModuleManager.computeModularProperty(itemStack, MeleeAssistModule.PUNCH_DAMAGE);
}
@SideOnly(Side.CLIENT)
public boolean isFull3D() {
return true;
}
/**
* Return the enchantability factor of the item. In this case, 0. Might add
* an enchantability module later :P
*/
public int getItemEnchantability() {
return 0;
}
/**
* Return the name for this tool's material.
*/
@Override
public String getToolMaterialName() {
return this.toolMaterial.toString();
}
/**
* Return whether this item is repairable in an anvil.
*/
@Override
public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) {
return false;
}
/**
* How long it takes to use or consume an item
*/
@Override
public int getMaxItemUseDuration(ItemStack par1ItemStack) {
return 72000;
}
/**
* Called when the right click button is pressed
*/
@Override
public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) {
for (IRightClickModule module : ModuleManager.getRightClickModules()) {
if (module.isValidForItem(itemStack) && ModuleManager.itemHasActiveModule(itemStack, module.getDataName())) {
module.onRightClick(player, world, itemStack);
}
}
return itemStack;
}
/**
* returns the action that specifies what animation to play when the items
* is being used
*/
@Override
public EnumAction getItemUseAction(ItemStack stack) {
return EnumAction.bow;
}
/**
* Called when the right click button is released
*/
@Override
public void onPlayerStoppedUsing(ItemStack itemStack, World world, EntityPlayer player, int par4) {
String mode = this.getActiveMode(itemStack, player);
IPowerModule module = ModuleManager.getModule(mode);
if (module != null)
((IRightClickModule)module).onPlayerStoppedUsing(itemStack, world, player, par4);
}
public boolean shouldPassSneakingClickToBlock(World world, int x, int y, int z) {
return true;
}
@Override
public boolean onItemUseFirst( ItemStack itemStack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) {
String mode = this.getActiveMode(itemStack, player);
IPowerModule module = ModuleManager.getModule(mode);
return module instanceof IRightClickModule && ((IRightClickModule)module).onItemUseFirst(itemStack, player, world, x, y, z, side, hitX, hitY, hitZ);
}
@Override
public boolean onItemUse( ItemStack itemStack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) {
String mode = this.getActiveMode(itemStack, player);
IPowerModule module2;
IPowerModule module = module2 = ModuleManager.getModule(mode);
boolean b;
if (module2 instanceof IRightClickModule) {
((IRightClickModule)module2).onItemUse(itemStack, player, world, x, y, z, side, hitX, hitY, hitZ);
b = false;
}
else {
b = false;
}
return b;
}
@Optional.Method(modid = "Forestry")
public float getSaplingModifier(ItemStack stack, World world, EntityPlayer player, int x, int y, int z) {
float n;
if (ModuleManager.itemHasActiveModule(stack, GrafterModule.MODULE_GRAFTER)) {
ElectricItemUtils.drainPlayerEnergy(player, ModuleManager.computeModularProperty(stack, GrafterModule.GRAFTER_ENERGY_CONSUMPTION));
MuseHeatUtils.heatPlayer(player, ModuleManager.computeModularProperty(stack, GrafterModule.GRAFTER_HEAT_GENERATION));
n = 100.0f;
}
else {
n = 0.0f;
}
return n;
}
public boolean canHarvestBlock(ItemStack stack, Block block, int meta, EntityPlayer player) {
Object o = new Object();
if (block.getMaterial().isToolNotRequired())
return true;
for (IBlockBreakingModule module : ModuleManager.getBlockBreakingModules()) {
if (ModuleManager.itemHasActiveModule(stack, module.getDataName()) && module.canHarvestBlock(stack, block, meta, player)) {
return true;
}
}
return false;
}
/* TE Crescent Hammer */
@Override
public boolean isUsable(ItemStack itemStack, EntityLivingBase entityLivingBase, int i, int i1, int i2) {
return entityLivingBase instanceof EntityPlayer && this.getActiveMode(itemStack, (EntityPlayer)entityLivingBase).equals(OmniWrenchModule.MODULE_OMNI_WRENCH);
}
/* TE Crescent Hammer */
@Override
public void toolUsed(ItemStack itemStack, EntityLivingBase entityLivingBase, int i, int i1, int i2) {
}
/* Railcraft Crowbar */
@Override
public boolean canWhack(EntityPlayer player, ItemStack itemStack, int i, int i1, int i2) {
return this.getActiveMode(itemStack, player).equals(OmniWrenchModule.MODULE_OMNI_WRENCH);
}
/* Railcraft Crowbar */
@Override
public boolean canLink(EntityPlayer player, ItemStack itemStack, EntityMinecart entityMinecart) {
return this.getActiveMode(itemStack, player).equals(OmniWrenchModule.MODULE_OMNI_WRENCH);
}
/* Railcraft Crowbar */
@Override
public boolean canBoost(EntityPlayer player, ItemStack itemStack, EntityMinecart entityMinecart) {
return this.getActiveMode(itemStack, player).equals(OmniWrenchModule.MODULE_OMNI_WRENCH);
}
/* Railcraft Crowbar */
@Override
public void onLink(EntityPlayer player, ItemStack itemStack, EntityMinecart entityMinecart) {
}
/* Railcraft Crowbar */
@Override
public void onWhack(EntityPlayer player, ItemStack itemStack, int i, int i1, int i2) {
}
/* Railcraft Crowbar */
@Override
public void onBoost(EntityPlayer player, ItemStack itemStack, EntityMinecart entityMinecart) {
}
/* AE wrench */
@Override
public boolean canWrench(ItemStack itemStack, EntityPlayer player, int i, int i1, int i2) {
return this.getActiveMode(itemStack, player).equals(OmniWrenchModule.MODULE_OMNI_WRENCH);
}
/* Buildcraft Wrench */
@Override
public void wrenchUsed(EntityPlayer player, int i, int i1, int i2) {
}
/* Buildcraft Wrench */
@Override
public boolean canWrench(EntityPlayer player, int i, int i1, int i2) {
return this.getActiveMode(player.getHeldItem(), player).equals(OmniWrenchModule.MODULE_OMNI_WRENCH);
}
/* Bluepower Screwdriver */
@Override
public boolean damage(ItemStack itemStack, int i, EntityPlayer entityPlayer, boolean b) {
return this.getActiveMode(itemStack, entityPlayer).equals(OmniWrenchModule.MODULE_OMNI_WRENCH);
}
/* ProjectRed Screwdriver */
@Override
public void damageScrewdriver(EntityPlayer entityPlayer, ItemStack itemStack) {
}
/* ProjectRed Screwdriver */
@Override
public boolean canUse(EntityPlayer entityPlayer, ItemStack itemStack) {
return this.getActiveMode(itemStack, entityPlayer).equals(OmniWrenchModule.MODULE_OMNI_WRENCH);
}
/* EnderIO Tool */
@Override
public void used(ItemStack itemStack, EntityPlayer entityPlayer, int i, int i1, int i2) {
}
/* EnderIO Tool */
@Override
public boolean canUse(ItemStack itemStack, EntityPlayer entityPlayer, int i, int i1, int i2) {
return this.getActiveMode(itemStack, entityPlayer).equals(OmniWrenchModule.MODULE_OMNI_WRENCH);
}
/* EnderIO Tool */
@Override
public boolean shouldHideFacades(ItemStack itemStack, EntityPlayer entityPlayer) {
return this.getActiveMode(itemStack, entityPlayer).equals(OmniWrenchModule.MODULE_OMNI_WRENCH);
}
/* Mekanism Wrench */
@Override
public boolean canUseWrench(EntityPlayer entityPlayer, int i, int i1, int i2) {
return this.getActiveMode(entityPlayer.getHeldItem(), entityPlayer).equals(OmniWrenchModule.MODULE_OMNI_WRENCH);
}
/* A D D E D B Y D E C O M P I L E R ------------------------------------------------------------------------------ */
public Option<IIcon> getModeIcon(String mode, ItemStack stack, EntityPlayer player) {
return (Option<IIcon>)ModeChangingModularItem$class.getModeIcon(this, mode, stack, player);
}
public Seq<String> getValidModes(ItemStack stack, EntityPlayer player) {
return (Seq<String>)ModeChangingModularItem$class.getValidModes(this, stack, player);
}
public Seq<String> getValidModes(ItemStack stack) {
return (Seq<String>)ModeChangingModularItem$class.getValidModes(this, stack);
}
public String getActiveMode(ItemStack stack) {
return ModeChangingModularItem$class.getActiveMode(this, stack);
}
public void setActiveMode(ItemStack stack, String newMode) {
ModeChangingItem$class.setActiveMode(this, stack, newMode);
}
public String getActiveMode(ItemStack stack, EntityPlayer player) {
return ModeChangingItem$class.getActiveMode(this, stack, player);
}
public void cycleMode(ItemStack stack, EntityPlayer player, int dMode) {
ModeChangingItem$class.cycleMode(this, stack, player, dMode);
}
public String nextMode(ItemStack stack, EntityPlayer player) {
return ModeChangingItem$class.nextMode(this, stack, player);
}
public String prevMode(ItemStack stack, EntityPlayer player) {
return ModeChangingItem$class.prevMode(this, stack, player);
}
}

View file

@ -1,325 +1,325 @@
package net.machinemuse.powersuits.item
import appeng.api.implementations.items.IAEWrench
import buildcraft.api.tools.IToolWrench
import cofh.api.item.IToolHammer
import cpw.mods.fml.common.Optional
import cpw.mods.fml.relauncher.{Side, SideOnly}
import crazypants.enderio.api.tool.ITool
import forestry.api.arboriculture.IToolGrafter
import mekanism.api.IMekWrench
import mods.railcraft.api.core.items.IToolCrowbar
import net.machinemuse.api._
import net.machinemuse.api.moduletrigger.IRightClickModule
import net.machinemuse.general.gui.MuseIcon
import net.machinemuse.numina.scala.OptionCast
import net.machinemuse.powersuits.common.Config
import net.machinemuse.powersuits.powermodule.tool.{GrafterModule, OmniWrenchModule}
import net.machinemuse.powersuits.powermodule.weapon.MeleeAssistModule
import net.machinemuse.utils.{ElectricItemUtils, MuseHeatUtils}
import net.minecraft.block.Block
import net.minecraft.client.renderer.texture.IIconRegister
import net.minecraft.entity.item.EntityMinecart
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.entity.{Entity, EntityLivingBase}
import net.minecraft.item.Item.ToolMaterial
import net.minecraft.item.{EnumAction, ItemStack}
import net.minecraft.util.{DamageSource, Vec3}
import net.minecraft.world.World
import powercrystals.minefactoryreloaded.api.IMFRHammer
/**
* Describes the modular power tool.
*
* @author MachineMuse
*/
@Optional.InterfaceList(Array(
new Optional.Interface(iface = "mekanism.api.IMekWrench", modid = "Mekanism", striprefs = true),
new Optional.Interface(iface = "crazypants.enderio.api.tool.ITool", modid = "EnderIO", striprefs = true),
new Optional.Interface(iface = "mrtjp.projectred.api.IScrewdriver", modid = "ProjRed|Core", striprefs = true),
new Optional.Interface(iface = "com.bluepowermod.api.misc.IScrewdriver", modid = "bluepower", striprefs = true),
new Optional.Interface(iface = "forestry.api.arboriculture.IToolGrafter", modid = "Forestry", striprefs = true),
new Optional.Interface(iface = "mods.railcraft.api.core.items.IToolCrowbar", modid = "Railcraft", striprefs = true),
new Optional.Interface(iface = "powercrystals.minefactoryreloaded.api.IMFRHammer", modid = "MineFactoryReloaded", striprefs = true),
new Optional.Interface(iface = "cofh.api.item.IToolHammer", modid = "CoFHCore", striprefs = true),
new Optional.Interface(iface = "buildcraft.api.tools.IToolWrench", modid = "BuildCraft|Core", striprefs = true),
new Optional.Interface(iface = "appeng.api.implementations.items.IAEWrench", modid = "appliedenergistics2", striprefs = true)
))
class ItemPowerFist extends ItemElectricTool(0, ToolMaterial.EMERALD)
with IModularItem
with IToolGrafter
with IToolHammer
with IMFRHammer
with IToolCrowbar
with IAEWrench
with IToolWrench
with com.bluepowermod.api.misc.IScrewdriver
with mrtjp.projectred.api.IScrewdriver
with ITool
with IMekWrench
with ModeChangingModularItem {
val iconpath: String = MuseIcon.ICON_PREFIX + "handitem"
setMaxStackSize(1)
setMaxDamage(0)
setCreativeTab(Config.getCreativeTab)
setUnlocalizedName("powerFist")
/**
* Returns the strength of the stack against a given block. 1.0F base,
* (Quality+1)*2 if correct blocktype, 1.5F if sword
*/
def getStrVsBlock(stack: ItemStack, block: Block): Float = getStrVsBlock(stack, block, 0)
/**
* FORGE: Overridden to allow custom tool effectiveness
*/
def getStrVsBlock(stack: ItemStack, block: Block, meta: Int): Float = 1
@SideOnly(Side.CLIENT) override def registerIcons(iconRegister: IIconRegister) {
itemIcon = iconRegister.registerIcon(iconpath)
}
/**
* Current implementations of this method in child classes do not use the
* entry argument beside stack. They just raise the damage on the stack.
*/
override def hitEntity(stack: ItemStack, entityBeingHit: EntityLivingBase, entityDoingHitting: EntityLivingBase): Boolean = {
if (ModuleManager.itemHasActiveModule(stack, OmniWrenchModule.MODULE_OMNI_WRENCH)) {
entityBeingHit.rotationYaw += 90.0F;
entityBeingHit.rotationYaw %= 360.0F;
}
if (entityDoingHitting.isInstanceOf[EntityPlayer] && ModuleManager.itemHasActiveModule(stack, MeleeAssistModule.MODULE_MELEE_ASSIST)) {
val player: EntityPlayer = entityDoingHitting.asInstanceOf[EntityPlayer]
val drain: Double = ModuleManager.computeModularProperty(stack, MeleeAssistModule.PUNCH_ENERGY)
if (ElectricItemUtils.getPlayerEnergy(player) > drain) {
ElectricItemUtils.drainPlayerEnergy(player, drain)
val damage: Double = ModuleManager.computeModularProperty(stack, MeleeAssistModule.PUNCH_DAMAGE)
val knockback: Double = ModuleManager.computeModularProperty(stack, MeleeAssistModule.PUNCH_KNOCKBACK)
val damageSource: DamageSource = DamageSource.causePlayerDamage(player)
if (entityBeingHit.attackEntityFrom(damageSource, damage.asInstanceOf[Int])) {
val lookVec: Vec3 = player.getLookVec
entityBeingHit.addVelocity(lookVec.xCoord * knockback, Math.abs(lookVec.yCoord + 0.2f) * knockback, lookVec.zCoord * knockback)
}
}
}
return true
}
/**
* Called when a block is destroyed using this tool.
* <p/>
* Returns: Whether to increment player use stats with this item
*/
override def onBlockDestroyed(stack: ItemStack, world: World, block: Block, x: Int, y: Int, z: Int, entity: EntityLivingBase): Boolean = {
entity match {
case player: EntityPlayer =>
import scala.collection.JavaConversions._
for (module <- ModuleManager.getBlockBreakingModules) {
if (ModuleManager.itemHasActiveModule(stack, module.getDataName)) {
if (module.onBlockDestroyed(stack, world, block, x, y, z, player)) {
return true
}
}
}
case _ =>
}
true
}
/**
* An itemstack sensitive version of getDamageVsEntity - allows items to
* handle damage based on
* itemstack data, like tags. Falls back to getDamageVsEntity.
*
* @param par1Entity The entity being attacked (or the attacking mob, if it's a mob
* - vanilla bug?)
* @param itemStack The itemstack
* @return the damage
*/
def getDamageVsEntity(par1Entity: Entity, itemStack: ItemStack): Float = {
ModuleManager.computeModularProperty(itemStack, MeleeAssistModule.PUNCH_DAMAGE).toFloat
}
@SideOnly(Side.CLIENT) override def isFull3D: Boolean = {
return true
}
/**
* Return the enchantability factor of the item. In this case, 0. Might add
* an enchantability module later :P
*/
override def getItemEnchantability = 0
/**
* Return the name for this tool's material.
*/
override def getToolMaterialName = this.toolMaterial.toString
/**
* Return whether this item is repairable in an anvil.
*/
override def getIsRepairable(par1ItemStack: ItemStack, par2ItemStack: ItemStack) = false
/**
* How long it takes to use or consume an item
*/
override def getMaxItemUseDuration(par1ItemStack: ItemStack): Int = 72000
/**
* Called when the right click button is pressed
*/
override def onItemRightClick(itemStack: ItemStack, world: World, player: EntityPlayer): ItemStack = {
import scala.collection.JavaConversions._
for (module <- ModuleManager.getRightClickModules) {
if (module.isValidForItem(itemStack) && ModuleManager.itemHasActiveModule(itemStack, module.getDataName)) {
module.onRightClick(player, world, itemStack)
}
}
return itemStack
}
/**
* returns the action that specifies what animation to play when the items
* is being used
*/
override def getItemUseAction(stack: ItemStack): EnumAction = {
return EnumAction.bow
}
/**
* Called when the right click button is released
*/
override def onPlayerStoppedUsing(itemStack: ItemStack, world: World, player: EntityPlayer, par4: Int) {
val mode: String = getActiveMode(itemStack, player)
val module: IPowerModule = ModuleManager.getModule(mode)
OptionCast[IRightClickModule](module) foreach {
m => m.onPlayerStoppedUsing(itemStack, world, player, par4)
}
}
def shouldPassSneakingClickToBlock(world: World, x: Int, y: Int, z: Int): Boolean = true
override def onItemUseFirst(itemStack: ItemStack, player: EntityPlayer, world: World, x: Int, y: Int, z: Int, side: Int, hitX: Float, hitY: Float, hitZ: Float): Boolean = {
val mode: String = getActiveMode(itemStack, player)
val module: IPowerModule = ModuleManager.getModule(mode)
module match {
case m: IRightClickModule => m.onItemUseFirst(itemStack, player, world, x, y, z, side, hitX, hitY, hitZ)
case _ => false
}
}
override def onItemUse(itemStack: ItemStack, player: EntityPlayer, world: World, x: Int, y: Int, z: Int, side: Int, hitX: Float, hitY: Float, hitZ: Float): Boolean = {
val mode: String = getActiveMode(itemStack, player)
val module: IPowerModule = ModuleManager.getModule(mode)
module match {
case m: IRightClickModule => m.onItemUse(itemStack, player, world, x, y, z, side, hitX, hitY, hitZ); false
case _ => false
}
}
@Optional.Method(modid = "Forestry")
def getSaplingModifier(stack: ItemStack, world: World, player: EntityPlayer, x: Int, y: Int, z: Int): Float = {
if (ModuleManager.itemHasActiveModule(stack, GrafterModule.MODULE_GRAFTER)) {
ElectricItemUtils.drainPlayerEnergy(player, ModuleManager.computeModularProperty(stack, GrafterModule.GRAFTER_ENERGY_CONSUMPTION))
MuseHeatUtils.heatPlayer(player, ModuleManager.computeModularProperty(stack, GrafterModule.GRAFTER_HEAT_GENERATION))
100F
} else {
0F
}
}
def canHarvestBlock(stack: ItemStack, block: Block, meta: Int, player: EntityPlayer): Boolean = {
if (block.getMaterial.isToolNotRequired) {
return true
}
import scala.collection.JavaConversions._
for (module <- ModuleManager.getBlockBreakingModules) {
if (ModuleManager.itemHasActiveModule(stack, module.getDataName) && module.canHarvestBlock(stack, block, meta, player)) {
return true
}
}
return false
}
// TE Crescent Hammer
override def isUsable(itemStack: ItemStack, entityLivingBase: EntityLivingBase, i: Int, i1: Int, i2: Int): Boolean = {
entityLivingBase match {
case player: EntityPlayer => getActiveMode(itemStack, player).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
case _ => false
}
}
// TE Crescent Hammer
override def toolUsed(itemStack: ItemStack, entityLivingBase: EntityLivingBase, i: Int, i1: Int, i2: Int): Unit = {}
// Railcraft Crowbar
override def canWhack(player: EntityPlayer, itemStack: ItemStack, i: Int, i1: Int, i2: Int): Boolean = {
getActiveMode(itemStack, player).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
}
// Railcraft Crowbar
override def canLink(player: EntityPlayer, itemStack: ItemStack, entityMinecart: EntityMinecart): Boolean = {
getActiveMode(itemStack, player).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
}
// Railcraft Crowbar
override def canBoost(player: EntityPlayer, itemStack: ItemStack, entityMinecart: EntityMinecart): Boolean = {
getActiveMode(itemStack, player).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
}
// Railcraft Crowbar
override def onLink(player: EntityPlayer, itemStack: ItemStack, entityMinecart: EntityMinecart): Unit = {}
// Railcraft Crowbar
override def onWhack(player: EntityPlayer, itemStack: ItemStack, i: Int, i1: Int, i2: Int): Unit = {}
// Railcraft Crowbar
override def onBoost(player: EntityPlayer, itemStack: ItemStack, entityMinecart: EntityMinecart): Unit = {}
// AE wrench
override def canWrench(itemStack: ItemStack, player: EntityPlayer, i: Int, i1: Int, i2: Int): Boolean = {
getActiveMode(itemStack, player).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
}
// Buildcraft Wrench
override def wrenchUsed(player: EntityPlayer, i: Int, i1: Int, i2: Int): Unit = { }
// Buildcraft Wrench
override def canWrench(player: EntityPlayer, i: Int, i1: Int, i2: Int): Boolean = {
getActiveMode(player.getHeldItem, player).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
}
// Bluepower Screwdriver
override def damage(itemStack: ItemStack, i: Int, entityPlayer: EntityPlayer, b: Boolean): Boolean = {
getActiveMode(itemStack, entityPlayer).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
}
// ProjectRed Screwdriver
override def damageScrewdriver(entityPlayer: EntityPlayer, itemStack: ItemStack): Unit = {}
// ProjectRed Screwdriver
override def canUse(entityPlayer: EntityPlayer, itemStack: ItemStack): Boolean = {
getActiveMode(itemStack, entityPlayer).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
}
// EnderIO Tool
override def used(itemStack: ItemStack, entityPlayer: EntityPlayer, i: Int, i1: Int, i2: Int): Unit = {}
// EnderIO Tool
override def canUse(itemStack: ItemStack, entityPlayer: EntityPlayer, i: Int, i1: Int, i2: Int): Boolean = {
getActiveMode(itemStack, entityPlayer).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
}
// EnderIO Tool
override def shouldHideFacades(itemStack: ItemStack, entityPlayer: EntityPlayer): Boolean = {
getActiveMode(itemStack, entityPlayer).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
}
// Mekanism Wrench
override def canUseWrench(entityPlayer: EntityPlayer, i: Int, i1: Int, i2: Int): Boolean = {
getActiveMode(entityPlayer.getHeldItem, entityPlayer).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
}
}
//package net.machinemuse.powersuits.item
//
//import appeng.api.implementations.items.IAEWrench
//import buildcraft.api.tools.IToolWrench
//import cofh.api.item.IToolHammer
//import cpw.mods.fml.common.Optional
//import cpw.mods.fml.relauncher.{Side, SideOnly}
//import crazypants.enderio.api.tool.ITool
//import forestry.api.arboriculture.IToolGrafter
//import mekanism.api.IMekWrench
//import mods.railcraft.api.core.items.IToolCrowbar
//import net.machinemuse.api._
//import net.machinemuse.api.moduletrigger.IRightClickModule
//import net.machinemuse.general.gui.MuseIcon
//import net.machinemuse.numina.scala.OptionCast
//import net.machinemuse.powersuits.common.Config
//import net.machinemuse.powersuits.powermodule.tool.{GrafterModule, OmniWrenchModule}
//import net.machinemuse.powersuits.powermodule.weapon.MeleeAssistModule
//import net.machinemuse.utils.{ElectricItemUtils, MuseHeatUtils}
//import net.minecraft.block.Block
//import net.minecraft.client.renderer.texture.IIconRegister
//import net.minecraft.entity.item.EntityMinecart
//import net.minecraft.entity.player.EntityPlayer
//import net.minecraft.entity.{Entity, EntityLivingBase}
//import net.minecraft.item.Item.ToolMaterial
//import net.minecraft.item.{EnumAction, ItemStack}
//import net.minecraft.util.{DamageSource, Vec3}
//import net.minecraft.world.World
//import powercrystals.minefactoryreloaded.api.IMFRHammer
//
///**
// * Describes the modular power tool.
// *
// * @author MachineMuse
// */
//@Optional.InterfaceList(Array(
// new Optional.Interface(iface = "mekanism.api.IMekWrench", modid = "Mekanism", striprefs = true),
// new Optional.Interface(iface = "crazypants.enderio.api.tool.ITool", modid = "EnderIO", striprefs = true),
// new Optional.Interface(iface = "mrtjp.projectred.api.IScrewdriver", modid = "ProjRed|Core", striprefs = true),
// new Optional.Interface(iface = "com.bluepowermod.api.misc.IScrewdriver", modid = "bluepower", striprefs = true),
// new Optional.Interface(iface = "forestry.api.arboriculture.IToolGrafter", modid = "Forestry", striprefs = true),
// new Optional.Interface(iface = "mods.railcraft.api.core.items.IToolCrowbar", modid = "Railcraft", striprefs = true),
// new Optional.Interface(iface = "powercrystals.minefactoryreloaded.api.IMFRHammer", modid = "MineFactoryReloaded", striprefs = true),
// new Optional.Interface(iface = "cofh.api.item.IToolHammer", modid = "CoFHCore", striprefs = true),
// new Optional.Interface(iface = "buildcraft.api.tools.IToolWrench", modid = "BuildCraft|Core", striprefs = true),
// new Optional.Interface(iface = "appeng.api.implementations.items.IAEWrench", modid = "appliedenergistics2", striprefs = true)
//))
//class ItemPowerFist extends ItemElectricTool(0, ToolMaterial.EMERALD)
//with IModularItem
//with IToolGrafter
//with IToolHammer
//with IMFRHammer
//with IToolCrowbar
//with IAEWrench
//with IToolWrench
//with com.bluepowermod.api.misc.IScrewdriver
//with mrtjp.projectred.api.IScrewdriver
//with ITool
//with IMekWrench
//with ModeChangingModularItem {
// val iconpath: String = MuseIcon.ICON_PREFIX + "handitem"
// setMaxStackSize(1)
// setMaxDamage(0)
// setCreativeTab(Config.getCreativeTab)
// setUnlocalizedName("powerFist")
//
//
// /**
// * Returns the strength of the stack against a given block. 1.0F base,
// * (Quality+1)*2 if correct blocktype, 1.5F if sword
// */
// def getStrVsBlock(stack: ItemStack, block: Block): Float = getStrVsBlock(stack, block, 0)
//
// /**
// * FORGE: Overridden to allow custom tool effectiveness
// */
// def getStrVsBlock(stack: ItemStack, block: Block, meta: Int): Float = 1
//
// @SideOnly(Side.CLIENT) override def registerIcons(iconRegister: IIconRegister) {
// itemIcon = iconRegister.registerIcon(iconpath)
// }
//
// /**
// * Current implementations of this method in child classes do not use the
// * entry argument beside stack. They just raise the damage on the stack.
// */
// override def hitEntity(stack: ItemStack, entityBeingHit: EntityLivingBase, entityDoingHitting: EntityLivingBase): Boolean = {
// if (ModuleManager.itemHasActiveModule(stack, OmniWrenchModule.MODULE_OMNI_WRENCH)) {
// entityBeingHit.rotationYaw += 90.0F;
// entityBeingHit.rotationYaw %= 360.0F;
// }
// if (entityDoingHitting.isInstanceOf[EntityPlayer] && ModuleManager.itemHasActiveModule(stack, MeleeAssistModule.MODULE_MELEE_ASSIST)) {
// val player: EntityPlayer = entityDoingHitting.asInstanceOf[EntityPlayer]
// val drain: Double = ModuleManager.computeModularProperty(stack, MeleeAssistModule.PUNCH_ENERGY)
// if (ElectricItemUtils.getPlayerEnergy(player) > drain) {
// ElectricItemUtils.drainPlayerEnergy(player, drain)
// val damage: Double = ModuleManager.computeModularProperty(stack, MeleeAssistModule.PUNCH_DAMAGE)
// val knockback: Double = ModuleManager.computeModularProperty(stack, MeleeAssistModule.PUNCH_KNOCKBACK)
// val damageSource: DamageSource = DamageSource.causePlayerDamage(player)
// if (entityBeingHit.attackEntityFrom(damageSource, damage.asInstanceOf[Int])) {
// val lookVec: Vec3 = player.getLookVec
// entityBeingHit.addVelocity(lookVec.xCoord * knockback, Math.abs(lookVec.yCoord + 0.2f) * knockback, lookVec.zCoord * knockback)
// }
// }
// }
// return true
// }
//
// /**
// * Called when a block is destroyed using this tool.
// * <p/>
// * Returns: Whether to increment player use stats with this item
// */
// override def onBlockDestroyed(stack: ItemStack, world: World, block: Block, x: Int, y: Int, z: Int, entity: EntityLivingBase): Boolean = {
// entity match {
// case player: EntityPlayer =>
// import scala.collection.JavaConversions._
// for (module <- ModuleManager.getBlockBreakingModules) {
// if (ModuleManager.itemHasActiveModule(stack, module.getDataName)) {
// if (module.onBlockDestroyed(stack, world, block, x, y, z, player)) {
// return true
// }
// }
// }
// case _ =>
// }
// true
// }
//
// /**
// * An itemstack sensitive version of getDamageVsEntity - allows items to
// * handle damage based on
// * itemstack data, like tags. Falls back to getDamageVsEntity.
// *
// * @param par1Entity The entity being attacked (or the attacking mob, if it's a mob
// * - vanilla bug?)
// * @param itemStack The itemstack
// * @return the damage
// */
// def getDamageVsEntity(par1Entity: Entity, itemStack: ItemStack): Float = {
// ModuleManager.computeModularProperty(itemStack, MeleeAssistModule.PUNCH_DAMAGE).toFloat
// }
//
// @SideOnly(Side.CLIENT) override def isFull3D: Boolean = {
// return true
// }
//
// /**
// * Return the enchantability factor of the item. In this case, 0. Might add
// * an enchantability module later :P
// */
// override def getItemEnchantability = 0
//
// /**
// * Return the name for this tool's material.
// */
// override def getToolMaterialName = this.toolMaterial.toString
//
//
// /**
// * Return whether this item is repairable in an anvil.
// */
// override def getIsRepairable(par1ItemStack: ItemStack, par2ItemStack: ItemStack) = false
//
// /**
// * How long it takes to use or consume an item
// */
// override def getMaxItemUseDuration(par1ItemStack: ItemStack): Int = 72000
//
//
// /**
// * Called when the right click button is pressed
// */
// override def onItemRightClick(itemStack: ItemStack, world: World, player: EntityPlayer): ItemStack = {
// import scala.collection.JavaConversions._
// for (module <- ModuleManager.getRightClickModules) {
// if (module.isValidForItem(itemStack) && ModuleManager.itemHasActiveModule(itemStack, module.getDataName)) {
// module.onRightClick(player, world, itemStack)
// }
// }
// return itemStack
// }
//
// /**
// * returns the action that specifies what animation to play when the items
// * is being used
// */
// override def getItemUseAction(stack: ItemStack): EnumAction = {
// return EnumAction.bow
// }
//
// /**
// * Called when the right click button is released
// */
// override def onPlayerStoppedUsing(itemStack: ItemStack, world: World, player: EntityPlayer, par4: Int) {
// val mode: String = getActiveMode(itemStack, player)
// val module: IPowerModule = ModuleManager.getModule(mode)
// OptionCast[IRightClickModule](module) foreach {
// m => m.onPlayerStoppedUsing(itemStack, world, player, par4)
// }
// }
//
// def shouldPassSneakingClickToBlock(world: World, x: Int, y: Int, z: Int): Boolean = true
//
// override def onItemUseFirst(itemStack: ItemStack, player: EntityPlayer, world: World, x: Int, y: Int, z: Int, side: Int, hitX: Float, hitY: Float, hitZ: Float): Boolean = {
// val mode: String = getActiveMode(itemStack, player)
// val module: IPowerModule = ModuleManager.getModule(mode)
// module match {
// case m: IRightClickModule => m.onItemUseFirst(itemStack, player, world, x, y, z, side, hitX, hitY, hitZ)
// case _ => false
// }
// }
//
// override def onItemUse(itemStack: ItemStack, player: EntityPlayer, world: World, x: Int, y: Int, z: Int, side: Int, hitX: Float, hitY: Float, hitZ: Float): Boolean = {
// val mode: String = getActiveMode(itemStack, player)
// val module: IPowerModule = ModuleManager.getModule(mode)
// module match {
// case m: IRightClickModule => m.onItemUse(itemStack, player, world, x, y, z, side, hitX, hitY, hitZ); false
// case _ => false
// }
// }
//
// @Optional.Method(modid = "Forestry")
// def getSaplingModifier(stack: ItemStack, world: World, player: EntityPlayer, x: Int, y: Int, z: Int): Float = {
// if (ModuleManager.itemHasActiveModule(stack, GrafterModule.MODULE_GRAFTER)) {
// ElectricItemUtils.drainPlayerEnergy(player, ModuleManager.computeModularProperty(stack, GrafterModule.GRAFTER_ENERGY_CONSUMPTION))
// MuseHeatUtils.heatPlayer(player, ModuleManager.computeModularProperty(stack, GrafterModule.GRAFTER_HEAT_GENERATION))
// 100F
// } else {
// 0F
// }
// }
//
// def canHarvestBlock(stack: ItemStack, block: Block, meta: Int, player: EntityPlayer): Boolean = {
// if (block.getMaterial.isToolNotRequired) {
// return true
// }
// import scala.collection.JavaConversions._
// for (module <- ModuleManager.getBlockBreakingModules) {
// if (ModuleManager.itemHasActiveModule(stack, module.getDataName) && module.canHarvestBlock(stack, block, meta, player)) {
// return true
// }
// }
// return false
// }
//
// // TE Crescent Hammer
// override def isUsable(itemStack: ItemStack, entityLivingBase: EntityLivingBase, i: Int, i1: Int, i2: Int): Boolean = {
// entityLivingBase match {
// case player: EntityPlayer => getActiveMode(itemStack, player).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
// case _ => false
// }
// }
//
// // TE Crescent Hammer
// override def toolUsed(itemStack: ItemStack, entityLivingBase: EntityLivingBase, i: Int, i1: Int, i2: Int): Unit = {}
//
// // Railcraft Crowbar
// override def canWhack(player: EntityPlayer, itemStack: ItemStack, i: Int, i1: Int, i2: Int): Boolean = {
// getActiveMode(itemStack, player).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
// }
//
// // Railcraft Crowbar
// override def canLink(player: EntityPlayer, itemStack: ItemStack, entityMinecart: EntityMinecart): Boolean = {
// getActiveMode(itemStack, player).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
// }
//
// // Railcraft Crowbar
// override def canBoost(player: EntityPlayer, itemStack: ItemStack, entityMinecart: EntityMinecart): Boolean = {
// getActiveMode(itemStack, player).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
// }
//
// // Railcraft Crowbar
// override def onLink(player: EntityPlayer, itemStack: ItemStack, entityMinecart: EntityMinecart): Unit = {}
//
// // Railcraft Crowbar
// override def onWhack(player: EntityPlayer, itemStack: ItemStack, i: Int, i1: Int, i2: Int): Unit = {}
//
// // Railcraft Crowbar
// override def onBoost(player: EntityPlayer, itemStack: ItemStack, entityMinecart: EntityMinecart): Unit = {}
//
// // AE wrench
// override def canWrench(itemStack: ItemStack, player: EntityPlayer, i: Int, i1: Int, i2: Int): Boolean = {
// getActiveMode(itemStack, player).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
// }
//
// // Buildcraft Wrench
// override def wrenchUsed(player: EntityPlayer, i: Int, i1: Int, i2: Int): Unit = { }
//
// // Buildcraft Wrench
// override def canWrench(player: EntityPlayer, i: Int, i1: Int, i2: Int): Boolean = {
// getActiveMode(player.getHeldItem, player).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
// }
//
// // Bluepower Screwdriver
// override def damage(itemStack: ItemStack, i: Int, entityPlayer: EntityPlayer, b: Boolean): Boolean = {
// getActiveMode(itemStack, entityPlayer).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
// }
//
// // ProjectRed Screwdriver
// override def damageScrewdriver(entityPlayer: EntityPlayer, itemStack: ItemStack): Unit = {}
//
// // ProjectRed Screwdriver
// override def canUse(entityPlayer: EntityPlayer, itemStack: ItemStack): Boolean = {
// getActiveMode(itemStack, entityPlayer).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
// }
//
// // EnderIO Tool
// override def used(itemStack: ItemStack, entityPlayer: EntityPlayer, i: Int, i1: Int, i2: Int): Unit = {}
//
// // EnderIO Tool
// override def canUse(itemStack: ItemStack, entityPlayer: EntityPlayer, i: Int, i1: Int, i2: Int): Boolean = {
// getActiveMode(itemStack, entityPlayer).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
// }
//
// // EnderIO Tool
// override def shouldHideFacades(itemStack: ItemStack, entityPlayer: EntityPlayer): Boolean = {
// getActiveMode(itemStack, entityPlayer).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
// }
//
// // Mekanism Wrench
// override def canUseWrench(entityPlayer: EntityPlayer, i: Int, i1: Int, i2: Int): Boolean = {
// getActiveMode(entityPlayer.getHeldItem, entityPlayer).equals(OmniWrenchModule.MODULE_OMNI_WRENCH)
// }
//}

View file

@ -47,7 +47,7 @@ trait ModeChangingModularItem extends ModeChangingItem {
modeFromNBT
} else {
val validModes = getValidModes(stack)
if (!validModes.isEmpty) {
if (validModes.nonEmpty) {
validModes(0)
} else {
""

View file

@ -3,7 +3,6 @@ package net.machinemuse.powersuits.item
import cpw.mods.fml.relauncher.{Side, SideOnly}
import net.machinemuse.api.electricity.MuseElectricItem
import net.machinemuse.api.{IModularItem, ModuleManager}
import net.machinemuse.numina.general.MuseMathUtils
import net.machinemuse.numina.general.MuseMathUtils._
import net.machinemuse.numina.geometry.Colour
import net.machinemuse.powersuits.powermodule.misc.{CosmeticGlowModule, TintModule}