Fix getting too many/few prizes
This commit is contained in:
parent
8b1b3c4b5a
commit
d3c4f77931
|
|
@ -1,9 +1,12 @@
|
||||||
package com.alttd.easter.gui;
|
package com.alttd.easter.gui;
|
||||||
|
|
||||||
|
import com.alttd.easter.config.Config;
|
||||||
import com.alttd.easter.config.Messages;
|
import com.alttd.easter.config.Messages;
|
||||||
import com.alttd.easter.data.DataManager;
|
import com.alttd.easter.data.DataManager;
|
||||||
import com.alttd.easter.egg.EggType;
|
import com.alttd.easter.egg.EggType;
|
||||||
import com.alttd.easter.util.ItemUtils;
|
import com.alttd.easter.util.ItemUtils;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
@ -25,14 +28,8 @@ public class TurnInGuiManager implements Listener {
|
||||||
this.dataManager = dataManager;
|
this.dataManager = dataManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String title() {
|
private Component title() {
|
||||||
// crude strip of minimessage tags for inventory title
|
return MiniMessage.miniMessage().deserialize(Messages.RABBIT.GUI_TITLE);
|
||||||
String mm = Messages.RABBIT.GUI_TITLE;
|
|
||||||
String plain = mm.replaceAll("<[^>]+>", "");
|
|
||||||
if (plain.isBlank()) {
|
|
||||||
plain = "Turn in Eggs";
|
|
||||||
}
|
|
||||||
return plain;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void open(Player player) {
|
public void open(Player player) {
|
||||||
|
|
@ -98,7 +95,9 @@ public class TurnInGuiManager implements Listener {
|
||||||
player.sendRichMessage(Messages.RABBIT.NO_EGGS);
|
player.sendRichMessage(Messages.RABBIT.NO_EGGS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dataManager.addEggs(player.getUniqueId(), submitted);
|
// determine how many new unique egg types were added so we can award correct number of prizes
|
||||||
|
int prevTotal = dataManager.getPlayerEggs(player.getUniqueId()).size();
|
||||||
|
int newlyAdded = dataManager.addEggs(player.getUniqueId(), submitted);
|
||||||
dataManager.save();
|
dataManager.save();
|
||||||
// Dialog formatting for submission summary
|
// Dialog formatting for submission summary
|
||||||
List<String> colors = submitted.stream().map(ItemUtils::colorName).toList();
|
List<String> colors = submitted.stream().map(ItemUtils::colorName).toList();
|
||||||
|
|
@ -118,9 +117,12 @@ public class TurnInGuiManager implements Listener {
|
||||||
Placeholder.parsed("egg3", c3)
|
Placeholder.parsed("egg3", c3)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
int total = dataManager.getPlayerEggs(player.getUniqueId()).size();
|
int newTotal = prevTotal + newlyAdded;
|
||||||
if (total % 4 == 0) {
|
int prevMilestones = prevTotal / 4;
|
||||||
var prize = com.alttd.easter.config.Config.PRIZES.getRandomPrize();
|
int newMilestones = newTotal / 4;
|
||||||
|
int prizesToGive = Math.max(0, newMilestones - prevMilestones);
|
||||||
|
for (int i = 0; i < prizesToGive; i++) {
|
||||||
|
var prize = Config.PRIZES.getRandomPrize();
|
||||||
if (prize != null) {
|
if (prize != null) {
|
||||||
player.getInventory().addItem(prize);
|
player.getInventory().addItem(prize);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,11 @@ import com.alttd.easter.config.Config;
|
||||||
import com.alttd.easter.config.Messages;
|
import com.alttd.easter.config.Messages;
|
||||||
import com.alttd.easter.gui.TurnInGuiManager;
|
import com.alttd.easter.gui.TurnInGuiManager;
|
||||||
import com.alttd.easter.util.Keys;
|
import com.alttd.easter.util.Keys;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.*;
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.entity.Rabbit;
|
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
|
|
@ -37,8 +35,8 @@ public class RabbitNpcManager implements Listener {
|
||||||
private void spawnOrFindRabbit() {
|
private void spawnOrFindRabbit() {
|
||||||
// Find existing rabbit with tag, else spawn new at config location
|
// Find existing rabbit with tag, else spawn new at config location
|
||||||
for (World world : Bukkit.getWorlds()) {
|
for (World world : Bukkit.getWorlds()) {
|
||||||
for (Entity e : world.getEntitiesByClass(Rabbit.class)) {
|
for (Entity entity : world.getEntitiesByClass(Rabbit.class)) {
|
||||||
if (e.getPersistentDataContainer().has(Keys.RABBIT_NPC, PersistentDataType.BYTE)) {
|
if (entity.getPersistentDataContainer().has(Keys.RABBIT_NPC, PersistentDataType.BYTE)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -49,13 +47,20 @@ public class RabbitNpcManager implements Listener {
|
||||||
}
|
}
|
||||||
Rabbit rabbit = (Rabbit) loc.getWorld().spawnEntity(loc, EntityType.RABBIT);
|
Rabbit rabbit = (Rabbit) loc.getWorld().spawnEntity(loc, EntityType.RABBIT);
|
||||||
rabbit.setCustomNameVisible(true);
|
rabbit.setCustomNameVisible(true);
|
||||||
rabbit.customName(net.kyori.adventure.text.Component.text("Easter Bunny"));
|
rabbit.setInvulnerable(true);
|
||||||
|
rabbit.setSilent(true);
|
||||||
|
rabbit.setGlowing(true);
|
||||||
|
rabbit.setGravity(false);
|
||||||
|
rabbit.setAI(false);
|
||||||
|
rabbit.customName(Component.text("Easter Bunny"));
|
||||||
rabbit.getPersistentDataContainer().set(Keys.RABBIT_NPC, PersistentDataType.BYTE, (byte) 1);
|
rabbit.getPersistentDataContainer().set(Keys.RABBIT_NPC, PersistentDataType.BYTE, (byte) 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onInteract(PlayerInteractAtEntityEvent event) {
|
public void onInteract(PlayerInteractAtEntityEvent event) {
|
||||||
if (!(event.getRightClicked() instanceof Rabbit) && !(event.getRightClicked() instanceof org.bukkit.entity.LivingEntity le && le.getPersistentDataContainer().has(Keys.RABBIT_NPC, PersistentDataType.BYTE))) {
|
if (!(event.getRightClicked() instanceof Rabbit)
|
||||||
|
&& !(event.getRightClicked() instanceof LivingEntity livingEntity
|
||||||
|
&& livingEntity.getPersistentDataContainer().has(Keys.RABBIT_NPC, PersistentDataType.BYTE))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user