From 6f6d065820dfb1a0dae0c651ebe012cdd9968a68 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Sat, 20 Aug 2011 10:25:48 -0700 Subject: [PATCH] Another WIP, this time with a functional GUI menu --- mcMMO/Changelog.txt | 5 +- .../gmail/nossr50/config/LoadProperties.java | 3 +- .../nossr50/datatypes/PlayerProfile.java | 2 +- .../datatypes/buttons/ButtonHUDStyle.java | 21 ++++++++ .../nossr50/datatypes/popups/PopupMMO.java | 43 ++++++++++++++++ .../listeners/mcSpoutInputListener.java | 46 +++++++++++++++++ .../listeners/mcSpoutScreenListener.java | 50 +++++++++++++++++++ .../com/gmail/nossr50/skills/Excavation.java | 10 ++-- mcMMO/com/gmail/nossr50/skills/Herbalism.java | 2 + mcMMO/com/gmail/nossr50/spout/SpoutStuff.java | 15 +++++- 10 files changed, 186 insertions(+), 11 deletions(-) create mode 100644 mcMMO/com/gmail/nossr50/datatypes/buttons/ButtonHUDStyle.java create mode 100644 mcMMO/com/gmail/nossr50/datatypes/popups/PopupMMO.java create mode 100644 mcMMO/com/gmail/nossr50/listeners/mcSpoutInputListener.java create mode 100644 mcMMO/com/gmail/nossr50/listeners/mcSpoutScreenListener.java diff --git a/mcMMO/Changelog.txt b/mcMMO/Changelog.txt index 0407b1cf4..697503f51 100644 --- a/mcMMO/Changelog.txt +++ b/mcMMO/Changelog.txt @@ -2,13 +2,16 @@ Changelog: #Versions without changelogs probably had very small misc fixes, like tweaks to the source code Version 1.1.06 Retro HUD implemented! -With the help of Randomage the XP Formulas have been vastly changed for flexability +With the help of Randomage the XP Formulas have been vastly changed for flexibility Global modifiers and skill modifiers now support decimals +Global formula modifier dropped from config GigaDrillBreaker/Berserk doesn't drop clay blocks anymore Fixed bug where Herbalism didn't heal more for bread/stew when right clicking a block Fixed bug where Wheat did not use the values form the config file TODO: + Add full customization of the colors + Fix Archery exploit Fix the NPE with theType Permission nodes for Spout elements Small HUD style diff --git a/mcMMO/com/gmail/nossr50/config/LoadProperties.java b/mcMMO/com/gmail/nossr50/config/LoadProperties.java index 11c060157..a6a7a5525 100644 --- a/mcMMO/com/gmail/nossr50/config/LoadProperties.java +++ b/mcMMO/com/gmail/nossr50/config/LoadProperties.java @@ -24,7 +24,7 @@ public class LoadProperties berserkCooldown, serratedStrikeCooldown, skullSplitterCooldown, abilityDurabilityLoss, feathersConsumedByChimaeraWing, repairdiamondlevel, rWood, rStone, rIron, rGold, rDiamond; - public static double pvpxprewardmodifier, globalxpmodifier, tamingxpmodifier, miningxpmodifier, + public static double pvpxprewardmodifier, tamingxpmodifier, miningxpmodifier, repairxpmodifier, woodcuttingxpmodifier, sorceryxpmodifier, unarmedxpmodifier, herbalismxpmodifier, excavationxpmodifier, archeryxpmodifier, swordsxpmodifier, axesxpmodifier, acrobaticsxpmodifier; @@ -381,7 +381,6 @@ public class LoadProperties woodcuttingrequiresaxe = readBoolean("Skills.Woodcutting.Requires_Axe", true); repairdiamondlevel = readInteger("Skills.Repair.Diamond.Level_Required", 50); - globalxpmodifier = readDouble("Experience.Formula.Multiplier.Global", 1.0); sorceryxpmodifier = readDouble("Experience.Formula.Multiplier.Sorcery", 1.0); tamingxpmodifier = readDouble("Experience.Formula.Multiplier.Taming", 1.0); miningxpmodifier = readDouble("Experience.Formula.Multiplier.Mining", 1.0); diff --git a/mcMMO/com/gmail/nossr50/datatypes/PlayerProfile.java b/mcMMO/com/gmail/nossr50/datatypes/PlayerProfile.java index 03c85a423..592c5b0bd 100644 --- a/mcMMO/com/gmail/nossr50/datatypes/PlayerProfile.java +++ b/mcMMO/com/gmail/nossr50/datatypes/PlayerProfile.java @@ -1003,7 +1003,7 @@ public class PlayerProfile } public Integer getXpToLevel(SkillType skillType) { - return (int) ((100+(skills.get(skillType) * LoadProperties.globalxpmodifier))*10); + return (int) ((1020+(skills.get(skillType) * 20))); } //Store the player's party diff --git a/mcMMO/com/gmail/nossr50/datatypes/buttons/ButtonHUDStyle.java b/mcMMO/com/gmail/nossr50/datatypes/buttons/ButtonHUDStyle.java new file mode 100644 index 000000000..bca8a6de8 --- /dev/null +++ b/mcMMO/com/gmail/nossr50/datatypes/buttons/ButtonHUDStyle.java @@ -0,0 +1,21 @@ +package com.gmail.nossr50.datatypes.buttons; + +import org.getspout.spoutapi.gui.GenericButton; + +import com.gmail.nossr50.datatypes.PlayerProfile; + +public class ButtonHUDStyle extends GenericButton +{ + public ButtonHUDStyle(PlayerProfile PP) + { + this.setText("HUD Type: "+PP.getHUDType().toString()); + this.setTooltip("Change your HUD style!"); + this.setWidth(120).setHeight(20); + this.setDirty(true); + } + public void updateText(PlayerProfile PP) + { + this.setText("HUD Type: "+PP.getHUDType().toString()); + this.setDirty(true); + } +} diff --git a/mcMMO/com/gmail/nossr50/datatypes/popups/PopupMMO.java b/mcMMO/com/gmail/nossr50/datatypes/popups/PopupMMO.java new file mode 100644 index 000000000..c4538a5d3 --- /dev/null +++ b/mcMMO/com/gmail/nossr50/datatypes/popups/PopupMMO.java @@ -0,0 +1,43 @@ +package com.gmail.nossr50.datatypes.popups; + +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.getspout.spoutapi.gui.GenericLabel; +import org.getspout.spoutapi.gui.GenericPopup; +import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.datatypes.PlayerProfile; +import com.gmail.nossr50.datatypes.buttons.ButtonHUDStyle; + +public class PopupMMO extends GenericPopup +{ + ButtonHUDStyle HUDButton = null; + GenericLabel mcMMO_label = new GenericLabel(); + GenericLabel tip_escape = new GenericLabel(); + int center_x = 427/2; + int center_y = 240/2; + + public PopupMMO(Player player, PlayerProfile PP, mcMMO plugin) + { + //240, 427 are the bottom right + mcMMO_label.setText(ChatColor.GOLD+"~mcMMO Menu~"); + mcMMO_label.setX(center_x-35).setY((center_y/2)-20).setDirty(true); + + tip_escape.setText(ChatColor.GRAY+"Press ESCAPE to exit!"); + tip_escape.setX(mcMMO_label.getX()-15).setY(mcMMO_label.getY()+10).setDirty(true); + + HUDButton = new ButtonHUDStyle(PP); + HUDButton.setX(center_x-(HUDButton.getWidth()/2)).setY(center_y/2).setDirty(true); + + this.attachWidget(plugin, HUDButton); + this.attachWidget(plugin, mcMMO_label); + this.attachWidget(plugin, tip_escape); + + this.setDirty(true); + } + + public void updateButtons(PlayerProfile PP) + { + HUDButton.updateText(PP); + this.setDirty(true); + } +} diff --git a/mcMMO/com/gmail/nossr50/listeners/mcSpoutInputListener.java b/mcMMO/com/gmail/nossr50/listeners/mcSpoutInputListener.java new file mode 100644 index 000000000..dd315d6e6 --- /dev/null +++ b/mcMMO/com/gmail/nossr50/listeners/mcSpoutInputListener.java @@ -0,0 +1,46 @@ +package com.gmail.nossr50.listeners; + +import org.getspout.spoutapi.event.input.InputListener; +import org.getspout.spoutapi.event.input.KeyPressedEvent; +import org.getspout.spoutapi.gui.ScreenType; +import org.getspout.spoutapi.keyboard.Keyboard; +import org.getspout.spoutapi.player.SpoutPlayer; + +import com.gmail.nossr50.Users; +import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.datatypes.popups.PopupMMO; +import com.gmail.nossr50.spout.SpoutStuff; + +public class mcSpoutInputListener extends InputListener +{ + mcMMO plugin = null; + + public mcSpoutInputListener(mcMMO pluginx) + { + plugin = pluginx; + } + + public void onKeyPressedEvent(KeyPressedEvent event) + { + if(!event.getPlayer().isSpoutCraftEnabled() || event.getPlayer().getMainScreen().getActivePopup() != null) + return; + if(event.getScreenType() != ScreenType.GAME_SCREEN) + return; + + SpoutPlayer sPlayer = event.getPlayer(); + + if(event.getKey() == Keyboard.KEY_M) + { + if(!SpoutStuff.playerScreens.containsKey(sPlayer)) + { + PopupMMO mmoPop = new PopupMMO(sPlayer, Users.getProfile(sPlayer), plugin); + SpoutStuff.playerScreens.put(sPlayer, mmoPop); + sPlayer.getMainScreen().attachPopupScreen(SpoutStuff.playerScreens.get(sPlayer)); + sPlayer.getMainScreen().setDirty(true); + } else { + sPlayer.getMainScreen().attachPopupScreen(SpoutStuff.playerScreens.get(sPlayer)); + sPlayer.getMainScreen().setDirty(true); + } + } + } +} \ No newline at end of file diff --git a/mcMMO/com/gmail/nossr50/listeners/mcSpoutScreenListener.java b/mcMMO/com/gmail/nossr50/listeners/mcSpoutScreenListener.java new file mode 100644 index 000000000..417fa93b7 --- /dev/null +++ b/mcMMO/com/gmail/nossr50/listeners/mcSpoutScreenListener.java @@ -0,0 +1,50 @@ +package com.gmail.nossr50.listeners; + +import org.getspout.spoutapi.event.screen.ButtonClickEvent; +import org.getspout.spoutapi.event.screen.ScreenListener; +import org.getspout.spoutapi.player.SpoutPlayer; + +import com.gmail.nossr50.Users; +import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.datatypes.HUDType; +import com.gmail.nossr50.datatypes.HUDmmo; +import com.gmail.nossr50.datatypes.PlayerProfile; +import com.gmail.nossr50.datatypes.buttons.ButtonHUDStyle; +import com.gmail.nossr50.spout.SpoutStuff; + +public class mcSpoutScreenListener extends ScreenListener +{ + mcMMO plugin = null; + public mcSpoutScreenListener(mcMMO pluginx) + { + plugin = pluginx; + } + public void onButtonClick(ButtonClickEvent event) + { + SpoutPlayer sPlayer = event.getPlayer(); + PlayerProfile PP = Users.getProfile(sPlayer); + + if(event.getButton() instanceof ButtonHUDStyle) + { + if(SpoutStuff.playerHUDs.containsKey(sPlayer)) + { + SpoutStuff.playerHUDs.get(sPlayer).resetHUD(); + SpoutStuff.playerHUDs.remove(sPlayer); + + switch(PP.getHUDType()) + { + case RETRO: + PP.setHUDType(HUDType.STANDARD); + break; + case STANDARD: + PP.setHUDType(HUDType.RETRO); + break; + } + + SpoutStuff.playerHUDs.put(sPlayer, new HUDmmo(sPlayer)); + + SpoutStuff.playerScreens.get(sPlayer).updateButtons(PP); + } + } + } +} \ No newline at end of file diff --git a/mcMMO/com/gmail/nossr50/skills/Excavation.java b/mcMMO/com/gmail/nossr50/skills/Excavation.java index 093b445d3..a2970cdf0 100644 --- a/mcMMO/com/gmail/nossr50/skills/Excavation.java +++ b/mcMMO/com/gmail/nossr50/skills/Excavation.java @@ -128,7 +128,7 @@ public class Excavation } break; case CLAY: - if(LoadProperties.slimeballs && PP.getSkillLevel(SkillType.EXCAVATION) >= 150) + if(LoadProperties.slimeballs && PP.getSkillLevel(SkillType.EXCAVATION) >= 50) { if(Math.random() * 20 > 19) { @@ -144,13 +144,13 @@ public class Excavation is.add(new ItemStack(Material.STRING, 1, (byte)0, (byte)0)); } } - if(LoadProperties.map && PP.getSkillLevel(SkillType.EXCAVATION) >= 25) + if(LoadProperties.watch && PP.getSkillLevel(SkillType.EXCAVATION) >= 500) { - if(Math.random() * 50 > 49) + if(Math.random() * 100 > 99) { MapView mv = Bukkit.getServer().createMap(loc.getWorld()); - xp+= LoadProperties.mmap; - is.add(new ItemStack(Material.MAP, 1, mv.getId())); + xp+= LoadProperties.mwatch; + is.add(new ItemStack(Material.WATCH, 1, mv.getId())); } } if(LoadProperties.bucket && PP.getSkillLevel(SkillType.EXCAVATION) >= 500) diff --git a/mcMMO/com/gmail/nossr50/skills/Herbalism.java b/mcMMO/com/gmail/nossr50/skills/Herbalism.java index ed9db6465..4d6f9cf95 100644 --- a/mcMMO/com/gmail/nossr50/skills/Herbalism.java +++ b/mcMMO/com/gmail/nossr50/skills/Herbalism.java @@ -78,6 +78,7 @@ public class Herbalism block.setData((byte) 0x03); } } + public static void greenTerra(Player player, Block block){ if(block.getType() == Material.COBBLESTONE || block.getType() == Material.DIRT){ if(!hasSeeds(player)) @@ -92,6 +93,7 @@ public class Herbalism } } } + public static Boolean canBeGreenTerra(Block block){ int t = block.getTypeId(); if(t == 4 || t == 3 || t == 59 || t == 81 || t == 83 || t == 91 || t == 86 || t == 39 || t == 46 || t == 37 || t == 38){ diff --git a/mcMMO/com/gmail/nossr50/spout/SpoutStuff.java b/mcMMO/com/gmail/nossr50/spout/SpoutStuff.java index 6954f2778..2781a5aaa 100644 --- a/mcMMO/com/gmail/nossr50/spout/SpoutStuff.java +++ b/mcMMO/com/gmail/nossr50/spout/SpoutStuff.java @@ -24,22 +24,33 @@ import com.gmail.nossr50.config.LoadProperties; import com.gmail.nossr50.datatypes.HUDType; import com.gmail.nossr50.datatypes.HUDmmo; import com.gmail.nossr50.datatypes.PlayerProfile; +import com.gmail.nossr50.datatypes.popups.PopupMMO; import com.gmail.nossr50.datatypes.SkillType; import com.gmail.nossr50.datatypes.HealthBarMMO; +import com.gmail.nossr50.listeners.mcSpoutInputListener; import com.gmail.nossr50.listeners.mcSpoutListener; +import com.gmail.nossr50.listeners.mcSpoutScreenListener; import com.gmail.nossr50.party.Party; public class SpoutStuff { + static mcMMO plugin = (mcMMO) Bukkit.getServer().getPluginManager().getPlugin("mcMMO"); + private final static mcSpoutListener spoutListener = new mcSpoutListener(); + private final static mcSpoutInputListener spoutInputListener = new mcSpoutInputListener(plugin); + private final static mcSpoutScreenListener spoutScreenListener = new mcSpoutScreenListener(plugin); + public static HashMap playerHUDs = new HashMap(); public static HashMap> partyHealthBars = new HashMap>(); + public static HashMap playerScreens = new HashMap(); + - static mcMMO plugin = (mcMMO) Bukkit.getServer().getPluginManager().getPlugin("mcMMO"); public static void registerCustomEvent() { - Bukkit.getServer().getPluginManager().registerEvent(Event.Type.CUSTOM_EVENT, spoutListener, Priority.Normal, Bukkit.getServer().getPluginManager().getPlugin("mcMMO")); + Bukkit.getServer().getPluginManager().registerEvent(Event.Type.CUSTOM_EVENT, spoutListener, Priority.Normal, plugin); + Bukkit.getServer().getPluginManager().registerEvent(Event.Type.CUSTOM_EVENT, spoutInputListener, Priority.Normal, plugin); + Bukkit.getServer().getPluginManager().registerEvent(Event.Type.CUSTOM_EVENT, spoutScreenListener, Priority.Normal, plugin); } public static Color getRetroColor(SkillType type)