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";
|
||||
}
|
@ -2,27 +2,60 @@ 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.appliances.customAdvancements.listener.ApplyPendingAdvancementsListener;
|
||||
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.listener.CustomAdvancementsListener;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.advancement.Advancement;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
|
||||
public class CustomAdvancements extends Appliance {
|
||||
public void grantAdvancement(String advancementName, Player player) {
|
||||
record PendingAdvancement(UUID receiver, String advancement) {
|
||||
}
|
||||
|
||||
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 {
|
||||
player.getAdvancementProgress(Objects.requireNonNull(Bukkit.getAdvancement(Objects.requireNonNull(NamespacedKey.fromString("custom_advancements:craftattack/" + advancementName))))).awardCriteria("criteria");
|
||||
NamespacedKey namespacedKey = Objects.requireNonNull(NamespacedKey.fromString("custom_advancements:craftattack/" + advancementName));
|
||||
Advancement advancement = Objects.requireNonNull(Bukkit.getAdvancement(namespacedKey));
|
||||
player.getAdvancementProgress(advancement).awardCriteria("criteria");
|
||||
} catch (Exception e) {
|
||||
Main.logger().info("Custom Advancements Datapack not found!");
|
||||
Pupsi marked this conversation as resolved
Outdated
|
||||
}
|
||||
}
|
||||
|
||||
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()));
|
||||
}
|
||||
|
||||
public void addPendingAdvancement(UUID receiver, String advancement) {
|
||||
Pupsi marked this conversation as resolved
MineTec
commented
sollte private sein, wenn grantAdvancement entscheidet ob es pending ist oder nicht sollte private sein, wenn grantAdvancement entscheidet ob es pending ist oder nicht
|
||||
pendingAdvancements.add(new PendingAdvancement(receiver, advancement));
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
protected List<Listener> listeners() {
|
||||
return List.of(new CustomAdvancementsDamageEntityListener());
|
||||
return List.of(
|
||||
new CustomAdvancementsListener(),
|
||||
new ApplyPendingAdvancementsListener()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
@ -1,6 +1,8 @@
|
||||
package eu.mhsl.craftattack.spawn.appliances.customAdvancements;
|
||||
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;
|
||||
@ -10,7 +12,7 @@ import org.bukkit.event.inventory.CraftItemEvent;
|
||||
import org.bukkit.event.player.PlayerChangedWorldEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class CustomAdvancementsDamageEntityListener extends ApplianceListener<CustomAdvancements> {
|
||||
public class CustomAdvancementsListener extends ApplianceListener<CustomAdvancements> {
|
||||
@EventHandler
|
||||
public void onEntityDamageEntity(EntityDamageByEntityEvent event) {
|
||||
if(!(event.getEntity() instanceof Player damaged)) return;
|
||||
@ -18,7 +20,7 @@ public class CustomAdvancementsDamageEntityListener extends ApplianceListener<Cu
|
||||
if(!damager.getInventory().getItemInMainHand().getType().equals(Material.AIR)) return;
|
||||
if(!damaged.hasPermission("admin")) return;
|
||||
|
||||
getAppliance().grantAdvancement("search_trouble", damager);
|
||||
getAppliance().grantAdvancement(Advancements.searchTrouble, damager.getUniqueId());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@ -28,12 +30,13 @@ public class CustomAdvancementsDamageEntityListener extends ApplianceListener<Cu
|
||||
if(!(event.getView().getPlayer() instanceof Player player)) return;
|
||||
|
||||
if(result.getType() == Material.RED_SHULKER_BOX) {
|
||||
getAppliance().grantAdvancement("fleischerchest", player);
|
||||
// getAppliance().grantAdvancement(Advancements.fleischerchest, player.getUniqueId());
|
||||
Pupsi marked this conversation as resolved
Outdated
MineTec
commented
? ?
|
||||
getAppliance().addPendingAdvancement(player.getUniqueId(), Advancements.fleischerchest);
|
||||
} else if(
|
||||
Pupsi marked this conversation as resolved
Outdated
MineTec
commented
das else if konstrukt ist nicht schön... ich tendiere sogar für jeweils einen eigenen handler pro advancement... vielleicht einfach zwei einzelstehnede ifs mit quasi early return? das else if konstrukt ist nicht schön...
ich tendiere sogar für jeweils einen eigenen handler pro advancement...
vielleicht einfach zwei einzelstehnede ifs mit quasi early return?
|
||||
result.getItemMeta().itemName().equals(Component.text("98fdf0ae-c3ab-4ef7-ae25-efd518d600de"))
|
||||
&& result.getItemMeta().getEnchantmentGlintOverride()
|
||||
Pupsi marked this conversation as resolved
Outdated
MineTec
commented
der check nach enchantmentGlintOverride raus, itemName reicht aus (ggf kommt das glint raus, da zurzeit ein bugs mit overrideGlint auf köpfen besteht) der check nach enchantmentGlintOverride raus, itemName reicht aus
(ggf kommt das glint raus, da zurzeit ein bugs mit overrideGlint auf köpfen besteht)
|
||||
) {
|
||||
getAppliance().grantAdvancement("craft_pixelblock", player);
|
||||
getAppliance().grantAdvancement(Advancements.craftPixelblock, player.getUniqueId());
|
||||
}
|
||||
}
|
||||
|
||||
@ -41,6 +44,6 @@ public class CustomAdvancementsDamageEntityListener extends ApplianceListener<Cu
|
||||
public void onChangeWorld(PlayerChangedWorldEvent event) {
|
||||
if(!event.getPlayer().getWorld().getName().startsWith("plugins/PixelBlocks/worlds")) return;
|
||||
|
||||
getAppliance().grantAdvancement("use_pixelblock", event.getPlayer());
|
||||
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.appliance.Appliance;
|
||||
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.listener.ApplyPendingRewardsListener;
|
||||
import eu.mhsl.craftattack.spawn.util.IteratorUtil;
|
||||
@ -172,12 +174,19 @@ public class Event extends Appliance {
|
||||
memorialItem.setItemMeta(meta);
|
||||
Reward memorial = new Reward(uuid, memorialItem);
|
||||
|
||||
Main.instance().getAppliance(CustomAdvancements.class).grantAdvancement(Advancements.participateEvent, uuid);
|
||||
|
||||
if(Bukkit.getPlayer(uuid) == null) {
|
||||
pendingRewards.add(memorial);
|
||||
return;
|
||||
}
|
||||
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) {
|
||||
|
@ -1,7 +1,10 @@
|
||||
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.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.ProjectStartCommand;
|
||||
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();
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user
die Fehlermeldung kann irreführend sein. Es sollte zumindest im Fehler ersichtlich sein welches advancement fehlt.
mein Vorschlag hier wäre du throwst nach dem custom fehler einfach nochmal die exception
throw e
und packst in die Objects.requireNonNull das angefragte rein. Dann ist alles immer ersichtlich.