mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-12 08:17:35 +00:00
New AddReloadListenerEvent that gathers server side data reload handlers. (#6849)
This commit is contained in:
1 parent
8e5138da27
commit
ff86201523
5 files changed
+65
-23
No files matched your search
@@ -109,6 +109,8 @@ import net.minecraft.world.IWorld;
|
||||
import net.minecraft.world.IWorldReader;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.data.IOptionalTagEntry;
|
||||
import net.minecraftforge.common.loot.IGlobalLootModifier;
|
||||
import net.minecraftforge.common.loot.LootModifierManager;
|
||||
import net.minecraftforge.common.util.BlockSnapshot;
|
||||
import net.minecraftforge.event.AnvilUpdateEvent;
|
||||
import net.minecraftforge.event.DifficultyChangeEvent;
|
||||
@@ -1165,12 +1167,10 @@ public class ForgeHooks
|
||||
* @return The modified list
|
||||
*/
|
||||
public static List<ItemStack> modifyLoot(List<ItemStack> list, LootContext context) {
|
||||
/*
|
||||
LootModifierManager man = context.getWorld().getServer().getLootModifierManager();
|
||||
LootModifierManager man = ForgeInternalHandler.getLootModifierManager();
|
||||
for(IGlobalLootModifier mod : man.getAllLootMods()) {
|
||||
list = mod.apply(list, context);
|
||||
}
|
||||
*/
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,9 @@ import net.minecraft.entity.player.ServerPlayerEntity;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.server.ServerWorld;
|
||||
import net.minecraftforge.common.loot.LootModifierManager;
|
||||
import net.minecraftforge.common.util.FakePlayerFactory;
|
||||
import net.minecraftforge.event.AddReloadListenerEvent;
|
||||
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
|
||||
import net.minecraftforge.event.entity.player.PlayerEvent;
|
||||
import net.minecraftforge.event.world.ChunkEvent;
|
||||
@@ -109,5 +111,21 @@ public class ForgeInternalHandler
|
||||
{
|
||||
ForgeHooks.updateBurns();
|
||||
}
|
||||
|
||||
private static LootModifierManager INSTANCE;
|
||||
|
||||
@SubscribeEvent
|
||||
public void onResourceReload(AddReloadListenerEvent event)
|
||||
{
|
||||
INSTANCE = new LootModifierManager();
|
||||
event.addListener(INSTANCE);
|
||||
}
|
||||
|
||||
static LootModifierManager getLootModifierManager()
|
||||
{
|
||||
if(INSTANCE == null)
|
||||
throw new IllegalStateException("Can not retrieve LootModifierManager until resources have loaded once.");
|
||||
return INSTANCE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package net.minecraftforge.event;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import net.minecraft.resources.DataPackRegistries;
|
||||
import net.minecraft.resources.IFutureReloadListener;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.eventbus.api.Event;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* The main ResourceManager is recreated on each reload, through {@link DataPackRegistries}'s creation.
|
||||
*
|
||||
* The event is fired on each reload and lets modders add their own ReloadListeners, for server-side resources.
|
||||
* The event is fired on the {@link MinecraftForge#EVENT_BUS}
|
||||
*/
|
||||
public class AddReloadListenerEvent extends Event
|
||||
{
|
||||
private final List<IFutureReloadListener> listeners = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* @param listener the listener to add to the ResourceManager on reload
|
||||
*/
|
||||
public void addListener(IFutureReloadListener listener)
|
||||
{
|
||||
listeners.add(listener);
|
||||
}
|
||||
|
||||
public List<IFutureReloadListener> getListeners()
|
||||
{
|
||||
return ImmutableList.copyOf(listeners);
|
||||
}
|
||||
}
|
||||
@@ -51,6 +51,7 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.ItemUseContext;
|
||||
import net.minecraft.loot.LootTable;
|
||||
import net.minecraft.loot.LootTableManager;
|
||||
import net.minecraft.resources.IFutureReloadListener;
|
||||
import net.minecraft.world.spawner.AbstractSpawner;
|
||||
import net.minecraft.util.ActionResult;
|
||||
import net.minecraft.util.ActionResultType;
|
||||
@@ -722,4 +723,11 @@ public class ForgeEventFactory
|
||||
MinecraftForge.EVENT_BUS.post(event);
|
||||
return event.getNewTime();
|
||||
}
|
||||
|
||||
public static List<IFutureReloadListener> onResourceReload()
|
||||
{
|
||||
AddReloadListenerEvent event = new AddReloadListenerEvent();
|
||||
MinecraftForge.EVENT_BUS.post(event);
|
||||
return event.getListeners();
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user