Skip to content

Commit

Permalink
3.0 Update
Browse files Browse the repository at this point in the history
- Added new item customization options.
- Added sound support.
- Fixed missing attribute on some versions of spigot.
  • Loading branch information
nmahdi committed Jun 17, 2024
1 parent 7d96089 commit 01c9e86
Show file tree
Hide file tree
Showing 15 changed files with 286 additions and 63 deletions.
7 changes: 4 additions & 3 deletions src/main/java/com/fishingrewards/FishingRewards.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package com.fishingrewards;

import com.fishingrewards.commands.FishingRewardsCommand;
import com.fishingrewards.listeners.FishingManager;
import com.fishingrewards.listeners.GUIHandler;
import com.fishingrewards.rewards.RewardManager;
import com.fishingrewards.managers.ConfigManager;
import com.fishingrewards.managers.FishingManager;
import com.fishingrewards.managers.GUIHandler;
import com.fishingrewards.managers.RewardManager;
import org.bukkit.plugin.java.JavaPlugin;

public class FishingRewards extends JavaPlugin {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package com.fishingrewards.commands;

import com.fishingrewards.*;
import com.fishingrewards.listeners.GUIHandler;
import com.fishingrewards.rewards.RewardManager;
import com.fishingrewards.managers.ConfigManager;
import com.fishingrewards.managers.GUIHandler;
import com.fishingrewards.managers.RewardManager;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
Expand All @@ -11,15 +12,15 @@

public class FishingRewardsCommand implements CommandExecutor {

private PluginLogger logger;
private ConfigManager configManager;
private RewardManager rewardManager;
private GUIHandler guiHandler;
private final PluginLogger logger;
private final ConfigManager configManager;
private final RewardManager rewardManager;
private final GUIHandler guiHandler;

private String[] help = {"&7/fishingrewards gui - Opens a GUI of the loaded rewards.", "&7/fishingrewards reload - Reloads config and rewards files."};
private String noPerm = ChatColor.translateAlternateColorCodes('&', "&5Insufficient Permissions.");
private String notPlayer = ChatColor.translateAlternateColorCodes('&', "&5You have to be a player to execute this command.");
private String reloaded = ChatColor.GREEN + "Config & Rewards have been reloaded.";
private final String[] help = {"&7/fishingrewards gui - Opens a GUI of the loaded rewards.", "&7/fishingrewards reload - Reloads config and rewards files."};
private final String noPerm = ChatColor.translateAlternateColorCodes('&', "&5Insufficient Permissions.");
private final String notPlayer = ChatColor.translateAlternateColorCodes('&', "&5You have to be a player to execute this command.");
private final String reloaded = ChatColor.GREEN + "Config & Rewards have been reloaded.";

public FishingRewardsCommand(FishingRewards plugin){
this.logger = plugin.getFishingLogger();
Expand Down Expand Up @@ -57,8 +58,8 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String
sender.sendMessage(reloaded);
return true;
}
sendHelpMessage(sender);
}
sendHelpMessage(sender);
}
return true;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.fishingrewards;
package com.fishingrewards.managers;

import com.fishingrewards.FishingRewards;
import com.fishingrewards.PluginLogger;
import com.fishingrewards.rewards.RewardConfiguration;
import org.bukkit.NamespacedKey;
import org.bukkit.Registry;
Expand Down Expand Up @@ -258,11 +260,6 @@ public RewardMode getRewardMode() {
return rewardMode;
}

//For Debug Purposes
public void setRewardMode(RewardMode mode) {
this.rewardMode = mode;
}

public File getRewardsFile() {
return rewardsFile;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package com.fishingrewards.listeners;
package com.fishingrewards.managers;

import com.fishingrewards.ConfigManager;
import com.fishingrewards.FishingRewards;
import com.fishingrewards.PluginLogger;
import com.fishingrewards.rewards.FishingReward;
import com.fishingrewards.rewards.RewardAttribute;
import com.fishingrewards.rewards.RewardManager;
import com.fishingrewards.rewards.SpawnedReward;
import com.fishingrewards.rewards.entity.FishingEntityReward;
import com.fishingrewards.rewards.entity.MobDropContainer;
Expand Down Expand Up @@ -41,11 +39,11 @@

public class FishingManager implements Listener {

private Random random = ThreadLocalRandom.current();
private FishingRewards plugin;
private PluginLogger logger;
private ConfigManager configManager;
private RewardManager rewardManager;
private final Random random = ThreadLocalRandom.current();
private final FishingRewards plugin;
private final PluginLogger logger;
private final ConfigManager configManager;
private final RewardManager rewardManager;

private final ArrayList<SpawnedReward> spawnedRewards = new ArrayList<>();

Expand Down Expand Up @@ -82,6 +80,9 @@ public void onFish(PlayerFishEvent e){
}
if(offHand.hasItemMeta() && offHand.getItemMeta().hasEnchants() && offHand.getItemMeta().hasEnchant(Enchantment.LUCK)) {
switch (configManager.getOffHandLuck()) {
default:
case DISABLE:
break;
case REPLACE:
luckLevel = offHand.getItemMeta().getEnchantLevel(Enchantment.LUCK);
break;
Expand Down Expand Up @@ -234,6 +235,10 @@ private void attachToRod(PlayerFishEvent e, FishingReward reward){
plugin.getServer().dispatchCommand(plugin.getServer().getConsoleSender(), command.replace(configManager.getPlayerPlaceHolder(), e.getPlayer().getName()));
}

if(reward.hasRewardSound()){
e.getPlayer().playSound(e.getPlayer().getLocation(), reward.getRewardSound().getSound(), reward.getRewardSound().getVolume(), reward.getRewardSound().getPitch());
}

SpawnedReward spawnedReward = new SpawnedReward(reward, e.getPlayer().getUniqueId(), entity.getUniqueId());
getSpawnedRewards().add(spawnedReward);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package com.fishingrewards.listeners;
package com.fishingrewards.managers;

import com.fishingrewards.ConfigManager;
import com.fishingrewards.FishingRewards;
import com.fishingrewards.rewards.FishingReward;
import com.fishingrewards.rewards.RewardManager;
import com.fishingrewards.rewards.entity.FishingEntityReward;
import com.fishingrewards.rewards.entity.MobDropContainer;
import com.fishingrewards.rewards.item.EnchantmentContainer;
Expand All @@ -21,6 +19,7 @@
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;

public class GUIHandler implements Listener {

Expand Down Expand Up @@ -79,12 +78,11 @@ public void openRewardGUI(Player player, int page){
for(int i = itemsPerPage*page; i < itemsPerPage*(page+1); i++){
if(i == rewardManager.getRewardsList().size()) break;
FishingReward reward = rewardManager.getRewardsList().get(i);

ItemStackBuilder builder = new ItemStackBuilder();
if(reward instanceof FishingItemReward itemReward){
ItemStackContainer container = itemReward.getItemStackContainer();
builder.setMaterial(container.getMaterial());
if(itemReward.getName() != null && !itemReward.getName().isEmpty()) builder.setName(itemReward.getName());
if(!container.getLore().isEmpty()) builder.addLore(container.getLore());
}else if(reward instanceof FishingEntityReward entityReward){
builder.setMaterial(Material.getMaterial(entityReward.getEntityType().toString()+"_SPAWN_EGG"));
}
Expand All @@ -105,6 +103,11 @@ public void openRewardGUI(Player player, int page){

if(reward instanceof FishingItemReward itemReward){
ItemStackContainer container = itemReward.getItemStackContainer();

if(itemReward.getName() != null && !itemReward.getName().isEmpty()) builder.setName(itemReward.getName());
if(!container.getLore().isEmpty()) builder.addLore(container.getLore());
if(container.isSkull() && container.hasSkullURL()) builder.setSkullURL(container.getSkullURL());

builder.addLore("&8Type: &fItem");
builder.addLore("&8Material: &f" + container.getMaterial());
builder.addLore("&8Amount: &f" + (container.getMinAmount() != container.getMaxAmount() ? container.getMinAmount() + "-" + container.getMaxAmount() : container.getMinAmount()));
Expand All @@ -117,6 +120,18 @@ public void openRewardGUI(Player player, int page){
if(container.hasGuaranteedEnchantmentsAmount()) builder.addLore("&8Guaranteed Enchantments Amount: &f" + container.getGuaranteedEnchantmentsAmount());
if(container.hasBonusEnchantmentsAmount()) builder.addLore("&8Bonus Enchantments Amount: &f" + container.getBonusEnchantmentsAmount());
if(container.overrideBonusEnchantments()) builder.addLore("&8Override Bonus Enchantments: &f" + container.overrideBonusEnchantments());

if(container.isPotion()){
if(container.hasEffects()) {
builder.addLore("&8Potion Effects:");
for (PotionEffect effect : container.getEffects()) {
builder.addLore("&8- &f" + effect.getType().getTranslationKey().substring(18) + " Lv." + (effect.getAmplifier() + 1) + " " + (effect.getDuration() / 20) + "s");
}
}
if(container.hasPotionColor()){
builder.addLore("&8Potion Color: " + container.getPotionColor().getRed() + ", " + container.getPotionColor().getGreen() + ", " + container.getPotionColor().getBlue());
}
}
}
if(reward instanceof FishingEntityReward entityReward){
builder.addLore("&8Type: &fEntity");
Expand Down Expand Up @@ -146,8 +161,10 @@ public void openRewardGUI(Player player, int page){
if(reward.isJunk()) builder.addLore("&8Junk: &ftrue");


if(reward.getName() != null && !reward.getName().isEmpty() )builder.addLore("&8Name: &f" + reward.getName());
if(reward.getName() != null && !reward.getName().isEmpty()) builder.addLore("&8Name: &f" + reward.getName());
if(reward.getCatchMessage() != null && !reward.getCatchMessage().isEmpty()) builder.addLore("&8Catch Message: &f" + reward.getCatchMessage());
if(reward.hasRewardSound()) builder.addLore("&8Sound: " + reward.getRewardSound().getSound() + " V: " + reward.getRewardSound().getVolume() + " P: " + reward.getRewardSound().getPitch());

if(!reward.getCommandsRan().isEmpty()){
builder.addLore("&8Commands:");
for(String command : reward.getCommandsRan()){
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package com.fishingrewards.rewards;
package com.fishingrewards.managers;

import com.fishingrewards.ConfigManager;
import com.fishingrewards.FishingRewards;
import com.fishingrewards.PluginLogger;
import com.fishingrewards.rewards.FishingReward;
import com.fishingrewards.rewards.RewardConfiguration;
import com.fishingrewards.rewards.entity.FishingEntityReward;
import com.fishingrewards.rewards.entity.MobDropContainer;
import com.fishingrewards.rewards.item.FishingItemReward;
Expand Down Expand Up @@ -75,6 +76,7 @@ private void loadRewards(){

if(yml.hasCommands()) fishingReward.setCommandsRan(yml.getComamnds());
if(yml.hasDisplayName()) fishingReward.setName(yml.getDisplayName());
if(yml.hasRewardSound()) fishingReward.setRewardSound(yml.getRewardSound());
if(yml.hasXP()) fishingReward.setXP(yml.getXP());
if(yml.hasCatchMessage()) fishingReward.setCatchMessage(yml.getCatchMessage());
if(yml.hasRegions()) fishingReward.addRegionCondition(yml.getRegions());
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/com/fishingrewards/rewards/FishingReward.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.fishingrewards.rewards;

import org.bukkit.Sound;
import org.bukkit.block.Biome;

import java.util.ArrayList;
Expand All @@ -19,6 +20,7 @@ public class FishingReward implements Comparable<FishingReward> {
protected boolean[] weather = new boolean[3];
protected boolean treasure = false;
protected boolean junk = false;
protected RewardSound rewardSound;

public String getName(){
return name;
Expand Down Expand Up @@ -146,6 +148,18 @@ public void setJunk(){
this.junk = true;
}

public boolean hasRewardSound(){
return rewardSound != null;
}

public RewardSound getRewardSound(){
return rewardSound;
}

public void setRewardSound(RewardSound rewardSound){
this.rewardSound = rewardSound;
}

@Override
public int compareTo(FishingReward reward) {
return Double.compare(chance, reward.chance);
Expand Down
34 changes: 17 additions & 17 deletions src/main/java/com/fishingrewards/rewards/RewardAttribute.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,28 @@
import org.bukkit.attribute.Attribute;

public enum RewardAttribute {
MaxHealth("health", Attribute.GENERIC_MAX_HEALTH),
FollowRange("follow-range", Attribute.GENERIC_FOLLOW_RANGE),
KnockbackResistance("knockback-resistance", Attribute.GENERIC_KNOCKBACK_RESISTANCE),
MovementSpeed("speed", Attribute.GENERIC_MOVEMENT_SPEED),
FlyingSpeed("flying-speed", Attribute.GENERIC_FLYING_SPEED),
AttackDamage("damage", Attribute.GENERIC_ATTACK_DAMAGE),
AttackSpeed("attack-speed", Attribute.GENERIC_ATTACK_SPEED),
Armor("armor", Attribute.GENERIC_ARMOR),
ArmorToughness("armor-toughness", Attribute.GENERIC_ARMOR_TOUGHNESS),
Luck("luck", Attribute.GENERIC_LUCK),
MaxAbsorption("absorption", Attribute.GENERIC_MAX_ABSORPTION),
MaxHealth("health", "GENERIC_MAX_HEALTH"),
FollowRange("follow-range", "GENERIC_FOLLOW_RANGE"),
KnockbackResistance("knockback-resistance", "GENERIC_KNOCKBACK_RESISTANCE"),
MovementSpeed("speed", "GENERIC_MOVEMENT_SPEED"),
FlyingSpeed("flying-speed", "GENERIC_FLYING_SPEED"),
AttackDamage("damage", "GENERIC_ATTACK_DAMAGE"),
AttackSpeed("attack-speed", "GENERIC_ATTACK_SPEED"),
Armor("armor", "GENERIC_ARMOR"),
ArmorToughness("armor-toughness", "GENERIC_ARMOR_TOUGHNESS"),
Luck("luck", "GENERIC_LUCK"),
MaxAbsorption("absorption", "GENERIC_MAX_ABSORPTION"),
//Horse
HorseJump("horse-jump", Attribute.HORSE_JUMP_STRENGTH),
HorseJump("horse-jump", "HORSE_JUMP_STRENGTH"),
//Zombie
ZombieSpawnReinforcements("zombie-reinforcement", Attribute.ZOMBIE_SPAWN_REINFORCEMENTS);
ZombieSpawnReinforcements("zombie-reinforcement", "ZOMBIE_SPAWN_REINFORCEMENTS");

private String configID;
private Attribute attribute;
private final String configID;
private final Attribute attribute;

RewardAttribute(String configID, Attribute attribute){
RewardAttribute(String configID, String attribute){
this.configID = configID;
this.attribute = attribute;
this.attribute = Attribute.valueOf(attribute);
}

public String getConfigID() {
Expand Down
37 changes: 37 additions & 0 deletions src/main/java/com/fishingrewards/rewards/RewardConfiguration.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.Registry;
import org.bukkit.Sound;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.block.Biome;
Expand All @@ -32,6 +33,7 @@ public class RewardConfiguration {
public static final String TREASURE = "treasure";
public static final String JUNK = "junk";
public static final String DISPLAY_NAME = "name";
public static final String SOUND = "sound";

public static final String ITEM_MATERIAL = "material";
public static final String ITEM_AMOUNT = "amount";
Expand All @@ -49,6 +51,9 @@ public class RewardConfiguration {
public static final String ITEM_ATTRIBUTE_OPERATION = "operation";
public static final String ITEM_ATTRIBUTE_EQUIPMENT_SLOT = "equipment-slot";
public static final String ITEM_DAMAGED = "damaged";
public static final String ITEM_SKULLURL = "skull-url";
public static final String POTION_EFFECTS = "potion-effects";
public static final String POTION_COLOR = "potion-color";

public static final String ENTITY_TYPE = "entity-type";
public static final String ENTITY_ATTRIBUTES = "attributes";
Expand Down Expand Up @@ -110,6 +115,15 @@ public String getDisplayName(){
return yml.getString(currentReward + DISPLAY_NAME);
}

public boolean hasRewardSound(){
return yml.contains(currentReward + SOUND);
}

public RewardSound getRewardSound(){
String[] sound = yml.getString(currentReward + SOUND).split(":");
return new RewardSound(Sound.valueOf(sound[0].toUpperCase()), Float.parseFloat(sound[1]), Float.parseFloat(sound[2]));
}

public boolean hasCommands(){
return yml.contains(currentReward + COMMANDS);
}
Expand Down Expand Up @@ -202,6 +216,9 @@ public HashMap<Attribute, Double> getEntityAttributes(){
HashMap<Attribute, Double> map = new HashMap<>();
ConfigurationSection section = yml.getConfigurationSection(currentReward + ENTITY_ATTRIBUTES);
for(RewardAttribute rewardAttribute : RewardAttribute.values()){
if(rewardAttribute.getAttribute() == null){
continue;
}
if(section.contains(rewardAttribute.getConfigID())){
map.put(rewardAttribute.getAttribute(), section.getDouble(rewardAttribute.getConfigID()));
}
Expand Down Expand Up @@ -305,10 +322,30 @@ public ItemStackContainer buildItemStackContainer(String path){
if(yml.contains(path + DOT + ITEM_ATTRIBUTES)){
Set<String> attributes = yml.getConfigurationSection(path + DOT + ITEM_ATTRIBUTES).getKeys(false);
for(RewardAttribute attribute : RewardAttribute.values()){
if(attribute.getAttribute() == null){
continue;
}
if(attributes.contains(attribute.getConfigID())) container.addAttribute(attribute.getAttribute(), "reward", yml.getDouble(path + DOT + ITEM_ATTRIBUTES + DOT + attribute.getConfigID() + DOT + ITEM_ATTRIBUTE_VALUE), AttributeModifier.Operation.valueOf(yml.getString(path + DOT + ITEM_ATTRIBUTES + DOT + attribute.getConfigID() + DOT + ITEM_ATTRIBUTE_OPERATION)), EquipmentSlot.valueOf(yml.getString(path + DOT + ITEM_ATTRIBUTES + DOT + attribute.getConfigID() + DOT + ITEM_ATTRIBUTE_EQUIPMENT_SLOT)));
}
}

if(container.isSkull() && yml.contains(path + DOT + ITEM_SKULLURL)){
container.setSkullURL(yml.getString(path + DOT + ITEM_SKULLURL));
}

if(container.isPotion()){
if(yml.contains(path + DOT + POTION_EFFECTS)){
for(String s : yml.getStringList(path + DOT + POTION_EFFECTS)){
String[] effect = s.split(":");
container.addEffect(Registry.EFFECT.get(NamespacedKey.minecraft(effect[0])), Integer.parseInt(effect[2])*20, Integer.parseInt(effect[1])-1);
}
}
if(yml.contains(path + DOT + POTION_COLOR)){
String[] colors = yml.getString(path + DOT + POTION_COLOR).split(":");
container.setPotionColor(Integer.parseInt(colors[0]), Integer.parseInt(colors[1]), Integer.parseInt(colors[2]));
}
}

return container;
}

Expand Down
Loading

0 comments on commit 01c9e86

Please sign in to comment.