Made fish generator work for both fish types

Load lava fish
Change from title messages to action bar messages
This commit is contained in:
2023-09-27 23:40:01 +02:00
parent c971e11d9f
commit 4e2d82a0aa
7 changed files with 70 additions and 171 deletions
@@ -13,38 +13,34 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataType;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.Optional;
import java.util.Random;
import java.util.stream.Collectors;
public abstract class Fish {
public class Fish {
private final float minLength;
private final float maxLength;
private final String fishName;
private final Rarity rarity;
private final ItemStack itemStack;
protected final FishingEvent fishingEvent;
protected final Logger logger;
Fish(FishingEvent fishingEvent, Logger logger) {
public Fish(FishingEvent fishingEvent, Logger logger, float minLength, float maxLength, String fishName, Rarity rarity, ItemStack itemStack) {
this.fishingEvent = fishingEvent;
this.logger = logger;
this.minLength = minLength;
this.maxLength = maxLength;
this.fishName = fishName;
this.rarity = rarity;
this.itemStack = itemStack;
}
/**
* Get an the fish item for a specific player
* @param player Player to get the item for
* @return ItemStack for that fish item if one exists
*/
protected abstract ItemStack getFishItem(Player player);
/**
* Gives back a different result each call, it generates a length based on the min and max length values for a fish
* @return a random length for this fish
*/
public abstract float generateLength();
public abstract Component fishName();
public abstract String normalFishName();
protected List<Component> fishLore(TagResolver tagResolver) {
MiniMessage miniMessage = MiniMessage.miniMessage();
return Fishes.FORMAT.LORE.stream()
@@ -52,8 +48,6 @@ public abstract class Fish {
.collect(Collectors.toList());
}
public abstract Rarity getRarity();
public Optional<ItemStack> createItem(Player player, double length, int points) {
ItemStack fishItem = getFishItem(player);
ItemMeta itemMeta = fishItem.getItemMeta();
@@ -82,4 +76,32 @@ public abstract class Fish {
return Optional.of(fishItem);
}
/**
* Get an the fish item for a specific player
* @param player Player to get the item for
* @return ItemStack for that fish item if one exists
*/
public ItemStack getFishItem(Player player) {
return itemStack.clone();
}
/**
* Gives back a different result each call, it generates a length based on the min and max length values for a fish
* @return a random length for this fish
*/
public float generateLength() {
return new Random().nextFloat(minLength, maxLength);
}
public net.kyori.adventure.text.@NotNull Component fishName() {
return MiniMessage.miniMessage().deserialize(Fishes.FORMAT.DISPLAY_NAME, Placeholder.parsed("fish_name", fishName));
}
public String normalFishName() {
return fishName;
}
public Rarity getRarity() {
return rarity;
}
}
@@ -1,64 +0,0 @@
package com.alttd.fishingevent.fish;
import com.alttd.fishingevent.FishingEvent;
import com.alttd.fishingevent.objects.Rarity;
import com.alttd.fishingevent.util.Logger;
import net.kyori.adventure.text.Component;
import org.bukkit.Location;
import org.bukkit.Particle;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Set;
public class LavaFish extends Fish {
public LavaFish(FishingEvent fishingEvent, Logger logger, float minLength, float maxLength, String fishName, Rarity rarity, ItemStack itemStack, ArrayList<Set<Particle>> particles) {
super(fishingEvent, logger);
}
@Override
public ItemStack getFishItem(Player player) {
return null;
}
@Override
public float generateLength() {
return 0;
}
@Override
public Component fishName() {
return null;
}
@Override
public String normalFishName() {
return null;
}
@Override
public Rarity getRarity() {
return null;
}
public void spawnParticles(Location location) {
//TODO run async function in here
//TODO color particles based on rarity?
}
public boolean validRod(ItemStack fishingRod) {
//TODO check data to see if its a lava rod
return false;
}
public Instant getSpawnTime(ItemStack fishingRod) {
//TODO calc based on rod enchant level and check if the rod is valid maybe?
return Instant.now();
}
}
@@ -1,55 +0,0 @@
package com.alttd.fishingevent.fish;
import com.alttd.fishingevent.FishingEvent;
import com.alttd.fishingevent.config.Fishes;
import com.alttd.fishingevent.objects.Rarity;
import com.alttd.fishingevent.util.Logger;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import java.util.Random;
public class WaterFish extends Fish {
private final float minLength;
private final float maxLength;
private final String fishName;
private final Rarity rarity;
private final ItemStack itemStack;
public WaterFish(FishingEvent fishingEvent, Logger logger, float minLength, float maxLength, String fishName, Rarity rarity, ItemStack itemStack) {
super(fishingEvent, logger);
this.minLength = minLength;
this.maxLength = maxLength;
this.fishName = fishName;
this.rarity = rarity;
this.itemStack = itemStack;
}
@Override
public ItemStack getFishItem(Player player) {
return itemStack.clone();
}
@Override
public float generateLength() {
return new Random().nextFloat(minLength, maxLength);
}
@Override
public net.kyori.adventure.text.@NotNull Component fishName() {
return MiniMessage.miniMessage().deserialize(Fishes.FORMAT.DISPLAY_NAME, Placeholder.parsed("fish_name", fishName));
}
@Override
public String normalFishName() {
return fishName;
}
@Override
public Rarity getRarity() {
return rarity;
}
}