[1.19.X] Adding more precise events for Advancements (#8360)

This commit is contained in:
28Pollux28 authored and GitHub committed 2022-09-03 20:17:16 +01:00
1 parent a2b35cae92
commit db14cbb0e0
6 files changed
+211 -1

No files matched your search

@@ -1030,6 +1030,10 @@ public class ForgeHooks
return null;
}
/**
* @deprecated See {@link ForgeEventFactory#onAdvancementEarnedEvent} and {@link ForgeEventFactory#onAdvancementProgressedEvent}
*/
@Deprecated(forRemoval = true, since = "1.19.2")
public static void onAdvancement(ServerPlayer player, Advancement advancement)
{
MinecraftForge.EVENT_BUS.post(new AdvancementEvent(player, advancement));
@@ -13,6 +13,9 @@ import java.util.function.Consumer;
import com.mojang.authlib.GameProfile;
import com.mojang.brigadier.CommandDispatcher;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementProgress;
import net.minecraft.commands.CommandBuildContext;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.ReloadableServerResources;
@@ -97,6 +100,9 @@ import net.minecraftforge.event.entity.living.LivingPackSizeEvent;
import net.minecraftforge.event.entity.living.LivingSpawnEvent;
import net.minecraftforge.event.entity.living.LivingSpawnEvent.AllowDespawn;
import net.minecraftforge.event.entity.living.ZombieEvent.SummonAidEvent;
import net.minecraftforge.event.entity.player.AdvancementEvent.AdvancementEarnEvent;
import net.minecraftforge.event.entity.player.AdvancementEvent.AdvancementProgressEvent;
import net.minecraftforge.event.entity.player.AdvancementEvent.AdvancementProgressEvent.ProgressType;
import net.minecraftforge.event.entity.player.ArrowLooseEvent;
import net.minecraftforge.event.entity.player.ArrowNockEvent;
import net.minecraftforge.event.entity.player.BonemealEvent;
@@ -129,6 +135,8 @@ import net.minecraftforge.event.level.LevelEvent;
import net.minecraftforge.eventbus.api.Event;
import net.minecraftforge.eventbus.api.Event.Result;
import net.minecraftforge.fml.LogicalSide;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -820,4 +828,16 @@ public class ForgeEventFactory
return WeightedRandomList.create();
return WeightedRandomList.create(event.getSpawnerDataList());
}
@ApiStatus.Internal
public static void onAdvancementEarnedEvent(Player player, Advancement earned)
{
MinecraftForge.EVENT_BUS.post(new AdvancementEarnEvent(player, earned));
}
@ApiStatus.Internal
public static void onAdvancementProgressedEvent(Player player, Advancement progressed, AdvancementProgress advancementProgress, String criterion, ProgressType progressType)
{
MinecraftForge.EVENT_BUS.post(new AdvancementProgressEvent(player, progressed, advancementProgress, criterion, progressType));
}
}
@@ -6,6 +6,7 @@
package net.minecraftforge.event.entity.player;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementProgress;
import net.minecraft.world.entity.player.Player;
import net.minecraftforge.common.MinecraftForge;
@@ -17,7 +18,9 @@ import net.minecraftforge.common.MinecraftForge;
* This event does not have a result. {@link HasResult}<br>
* <br>
* This event is fired on the {@link MinecraftForge#EVENT_BUS}.
* @deprecated Use {@link net.minecraftforge.event.entity.player.AdvancementEvent.AdvancementEarnEvent} and {@link net.minecraftforge.event.entity.player.AdvancementEvent.AdvancementProgressEvent} instead
*/
@Deprecated(since = "1.19.2")
public class AdvancementEvent extends PlayerEvent
{
private final Advancement advancement;
@@ -32,4 +35,106 @@ public class AdvancementEvent extends PlayerEvent
{
return advancement;
}
/**
* Fired when the player earns an advancement. An advancement is earned once its requirements are complete.
*
* <p>Note that advancements may be hidden from the player or used in background mechanics, such as recipe
* advancements for unlocking recipes in the recipe book.</p>
*
* <p>This event is not {@linkplain net.minecraftforge.eventbus.api.Cancelable cancellable}, and does not {@linkplain HasResult have a result}.</p>
*
* <p>This event is fired on the {@linkplain MinecraftForge#EVENT_BUS main Forge event bus},
* only on the {@linkplain net.minecraftforge.fml.LogicalSide#SERVER logical server}.</p>
*
* @see AdvancementProgress#isDone()
*/
//todo: should extend AdvancementEvent in 1.20
public static class AdvancementEarnEvent extends PlayerEvent
{
private final Advancement advancement;
public AdvancementEarnEvent(Player player, Advancement earned)
{
super(player);
this.advancement = earned;
}
/**
*
* {@return the advancement that was earned}
*/
public Advancement getAdvancement()
{
return advancement;
}
}
/**
* Fired when the player's progress on an advancement criterion is granted or revoked.
*
* <p>This event is not {@linkplain net.minecraftforge.eventbus.api.Cancelable cancellable}, and does not {@linkplain HasResult have a result}.</p>
*
* <p>This event is fired on the {@linkplain MinecraftForge#EVENT_BUS main Forge event bus},
* only on the {@linkplain net.minecraftforge.fml.LogicalSide#SERVER logical server}.</p>
*
* @see AdvancementEarnEvent
* @see net.minecraft.server.PlayerAdvancements#award(Advancement, String)
* @see net.minecraft.server.PlayerAdvancements#revoke(Advancement, String)
*/
//todo: should extend AdvancementEvent in 1.20
public static class AdvancementProgressEvent extends PlayerEvent
{
private final Advancement advancement;
private final AdvancementProgress advancementProgress;
private final String criterionName;
private final AdvancementEvent.AdvancementProgressEvent.ProgressType progressType;
public AdvancementProgressEvent(Player player, Advancement progressed, AdvancementProgress advancementProgress, String criterionName, AdvancementEvent.AdvancementProgressEvent.ProgressType progressType)
{
super(player);
this.advancement = progressed;
this.advancementProgress = advancementProgress;
this.criterionName = criterionName;
this.progressType = progressType;
}
/**
*
* {@return The advancement that was progressed}
*/
public Advancement getAdvancement()
{
return advancement;
}
/**
* {@return the progress of the advancement}
*/
public AdvancementProgress getAdvancementProgress()
{
return advancementProgress;
}
/**
* {@return name of the criterion that was progressed}
*/
public String getCriterionName()
{
return criterionName;
}
/**
* {@return The type of progress for the criterion in this event}
*/
public ProgressType getProgressType()
{
return progressType;
}
public enum ProgressType
{
GRANT, REVOKE
}
}
}