master-customAdvancements #4
@ -0,0 +1,11 @@
|
|||||||
|
package eu.mhsl.craftattack.spawn.appliances.customAdvancements;
|
||||||
|
|
||||||
|
public class Advancements {
|
||||||
|
public static String searchTrouble = "search_trouble";
|
||||||
|
public static String fleischerchest = "fleischerchest";
|
||||||
|
public static String craftPixelblock = "craft_pixelblock";
|
||||||
|
public static String usePixelblock = "use_pixelblock";
|
||||||
|
public static String start = "start";
|
||||||
|
public static String winner = "winner";
|
||||||
|
public static String participateEvent = "participate_event";
|
||||||
|
}
|
@ -1,23 +1,62 @@
|
|||||||
package eu.mhsl.craftattack.spawn.appliances.customAdvancements;
|
package eu.mhsl.craftattack.spawn.appliances.customAdvancements;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.Main;
|
||||||
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.listener.ApplyPendingAdvancementsListener;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.listener.CustomAdvancementsListener;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.NamespacedKey;
|
import org.bukkit.NamespacedKey;
|
||||||
|
import org.bukkit.advancement.Advancement;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
public class CustomAdvancements extends Appliance {
|
public class CustomAdvancements extends Appliance {
|
||||||
public void grantAdvancement(String advancementName, Player player) {
|
record PendingAdvancement(UUID receiver, String advancement) {
|
||||||
player.getAdvancementProgress(Objects.requireNonNull(Bukkit.getAdvancement(Objects.requireNonNull(NamespacedKey.fromString("custom_advancements:craftattack/" + advancementName))))).awardCriteria("criteria");
|
}
|
||||||
|
|
||||||
|
private final List<PendingAdvancement> pendingAdvancements = new ArrayList<>();
|
||||||
|
|
||||||
|
public void grantAdvancement(String advancementName, UUID playerUUID) {
|
||||||
|
Player player = Bukkit.getPlayer(playerUUID);
|
||||||
|
if(player == null) {
|
||||||
|
addPendingAdvancement(playerUUID, advancementName);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
NamespacedKey namespacedKey = Objects.requireNonNull(NamespacedKey.fromString("custom_advancements:craftattack/" + advancementName), "NamespacedKey is invalid!");
|
||||||
|
Advancement advancement = Objects.requireNonNull(Bukkit.getAdvancement(namespacedKey), "The advancement does not exist!");
|
||||||
|
player.getAdvancementProgress(advancement).awardCriteria("criteria");
|
||||||
|
} catch (Exception e) {
|
||||||
|
Main.logger().info("Advancement " + advancementName + " not found! (is Custom Advancements data pack loaded?)");
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void applyPendingAdvancements(Player player) {
|
||||||
|
if(this.pendingAdvancements.isEmpty()) return;
|
||||||
|
List<PendingAdvancement> grantedAdvancements = pendingAdvancements.stream()
|
||||||
|
.filter(pendingAdvancement -> pendingAdvancement.receiver.equals(player.getUniqueId())).toList();
|
||||||
|
this.pendingAdvancements.removeAll(grantedAdvancements);
|
||||||
|
grantedAdvancements.forEach(pendingAdvancement -> grantAdvancement(pendingAdvancement.advancement(), player.getUniqueId()));
|
||||||
|
}
|
||||||
|
|
||||||
Pupsi marked this conversation as resolved
|
|||||||
|
private void addPendingAdvancement(UUID receiver, String advancement) {
|
||||||
|
pendingAdvancements.add(new PendingAdvancement(receiver, advancement));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
protected List<Listener> listeners() {
|
protected List<Listener> listeners() {
|
||||||
return List.of(new CustomAdvancementsDamageEntityListener());
|
return List.of(
|
||||||
|
new CustomAdvancementsListener(),
|
||||||
|
new ApplyPendingAdvancementsListener()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
package eu.mhsl.craftattack.spawn.appliances.customAdvancements;
|
|
||||||
|
|
||||||
import eu.mhsl.craftattack.spawn.appliance.ApplianceListener;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
|
||||||
|
|
||||||
public class CustomAdvancementsDamageEntityListener extends ApplianceListener<CustomAdvancements> {
|
|
||||||
@EventHandler
|
|
||||||
public void onEntityDamageEntity(EntityDamageByEntityEvent event) {
|
|
||||||
if(!(event.getEntity() instanceof Player damaged)) return;
|
|
||||||
if(!(event.getDamager() instanceof Player damager)) return;
|
|
||||||
if(!damager.getInventory().getItemInMainHand().getType().equals(Material.AIR)) return;
|
|
||||||
if(!damaged.hasPermission("admin")) return;
|
|
||||||
|
|
||||||
getAppliance().grantAdvancement("search_trouble", damager);
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,13 @@
|
|||||||
|
package eu.mhsl.craftattack.spawn.appliances.customAdvancements.listener;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.appliance.ApplianceListener;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
|
|
||||||
|
public class ApplyPendingAdvancementsListener extends ApplianceListener<CustomAdvancements> {
|
||||||
|
@EventHandler
|
||||||
|
public void onJoin(PlayerJoinEvent event) {
|
||||||
|
getAppliance().applyPendingAdvancements(event.getPlayer());
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
package eu.mhsl.craftattack.spawn.appliances.customAdvancements.listener;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.appliance.ApplianceListener;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.Advancements;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
|
import org.bukkit.event.inventory.CraftItemEvent;
|
||||||
|
import org.bukkit.event.player.PlayerChangedWorldEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class CustomAdvancementsListener extends ApplianceListener<CustomAdvancements> {
|
||||||
|
@EventHandler
|
||||||
|
public void onEntityDamageEntity(EntityDamageByEntityEvent event) {
|
||||||
|
if(!(event.getEntity() instanceof Player damaged)) return;
|
||||||
|
if(!(event.getDamager() instanceof Player damager)) return;
|
||||||
|
if(!damager.getInventory().getItemInMainHand().getType().equals(Material.AIR)) return;
|
||||||
|
if(!damaged.hasPermission("admin")) return;
|
||||||
|
|
||||||
|
getAppliance().grantAdvancement(Advancements.searchTrouble, damager.getUniqueId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onCraftItem(CraftItemEvent event) {
|
||||||
|
ItemStack result = event.getInventory().getResult();
|
||||||
|
if(result == null) return;
|
||||||
|
if(!(event.getView().getPlayer() instanceof Player player)) return;
|
||||||
|
|
||||||
|
if(result.getType() == Material.RED_SHULKER_BOX) {
|
||||||
|
getAppliance().grantAdvancement(Advancements.fleischerchest, player.getUniqueId());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(result.getItemMeta().itemName().equals(Component.text("98fdf0ae-c3ab-4ef7-ae25-efd518d600de"))) {
|
||||||
|
getAppliance().grantAdvancement(Advancements.craftPixelblock, player.getUniqueId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onChangeWorld(PlayerChangedWorldEvent event) {
|
||||||
|
if(!event.getPlayer().getWorld().getName().startsWith("plugins/PixelBlocks/worlds")) return;
|
||||||
|
|
||||||
|
getAppliance().grantAdvancement(Advancements.usePixelblock, event.getPlayer().getUniqueId());
|
||||||
|
}
|
||||||
|
}
|
@ -5,6 +5,8 @@ import eu.mhsl.craftattack.spawn.Main;
|
|||||||
import eu.mhsl.craftattack.spawn.api.HttpServer;
|
import eu.mhsl.craftattack.spawn.api.HttpServer;
|
||||||
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
||||||
import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
|
import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.Advancements;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.event.command.*;
|
import eu.mhsl.craftattack.spawn.appliances.event.command.*;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.event.listener.ApplyPendingRewardsListener;
|
import eu.mhsl.craftattack.spawn.appliances.event.listener.ApplyPendingRewardsListener;
|
||||||
import eu.mhsl.craftattack.spawn.util.IteratorUtil;
|
import eu.mhsl.craftattack.spawn.util.IteratorUtil;
|
||||||
@ -172,12 +174,19 @@ public class Event extends Appliance {
|
|||||||
memorialItem.setItemMeta(meta);
|
memorialItem.setItemMeta(meta);
|
||||||
Reward memorial = new Reward(uuid, memorialItem);
|
Reward memorial = new Reward(uuid, memorialItem);
|
||||||
|
|
||||||
|
Main.instance().getAppliance(CustomAdvancements.class).grantAdvancement(Advancements.participateEvent, uuid);
|
||||||
|
|
||||||
if(Bukkit.getPlayer(uuid) == null) {
|
if(Bukkit.getPlayer(uuid) == null) {
|
||||||
pendingRewards.add(memorial);
|
pendingRewards.add(memorial);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
giveReward(memorial);
|
giveReward(memorial);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
rewardConfiguration.rewards.keySet().stream()
|
||||||
|
.max(Comparator.comparing(rewardConfiguration.rewards::get))
|
||||||
|
.ifPresent(uuid -> Main.instance().getAppliance(CustomAdvancements.class)
|
||||||
|
.grantAdvancement(Advancements.winner, uuid));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void giveReward(Reward reward) {
|
private void giveReward(Reward reward) {
|
||||||
|
@ -11,8 +11,8 @@ public class FleischerchestCraftItemListener extends ApplianceListener<Fleischer
|
|||||||
public void onPrepareItemCraft(PrepareItemCraftEvent event) {
|
public void onPrepareItemCraft(PrepareItemCraftEvent event) {
|
||||||
ItemStack result = event.getInventory().getResult();
|
ItemStack result = event.getInventory().getResult();
|
||||||
if(result == null) return;
|
if(result == null) return;
|
||||||
if(result.getType() == Material.RED_SHULKER_BOX) {
|
if(result.getType() != Material.RED_SHULKER_BOX) return;
|
||||||
getAppliance().renameItem(event.getInventory().getResult());
|
|
||||||
}
|
getAppliance().renameItem(event.getInventory().getResult());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
package eu.mhsl.craftattack.spawn.appliances.projectStart;
|
package eu.mhsl.craftattack.spawn.appliances.projectStart;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.Main;
|
||||||
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
||||||
import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
|
import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.Advancements;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.projectStart.command.ProjectStartCancelCommand;
|
import eu.mhsl.craftattack.spawn.appliances.projectStart.command.ProjectStartCancelCommand;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.projectStart.command.ProjectStartCommand;
|
import eu.mhsl.craftattack.spawn.appliances.projectStart.command.ProjectStartCommand;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.projectStart.command.ProjectStartResetCommand;
|
import eu.mhsl.craftattack.spawn.appliances.projectStart.command.ProjectStartResetCommand;
|
||||||
@ -140,6 +143,10 @@ public class ProjectStart extends Appliance {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Bukkit.getOnlinePlayers().forEach(
|
||||||
|
player -> Main.instance().getAppliance(CustomAdvancements.class).grantAdvancement(Advancements.start, player.getUniqueId())
|
||||||
|
);
|
||||||
|
|
||||||
blockCycle.reset();
|
blockCycle.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user
sollte private sein, wenn grantAdvancement entscheidet ob es pending ist oder nicht