Split the player file data hook per data handler
Signed-off-by: Irmo van den Berge <irmo.vandenberge@ziggo.nl>
This commit is contained in:
1 parent
fdec6d9317
commit
eedaea6e0a
3 files changed
+167
-103
No files matched your search
-103
@@ -1,22 +1,14 @@
|
||||
package com.bergerkiller.bukkit.common.internal.logic;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import com.bergerkiller.bukkit.common.internal.CommonBootstrap;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.bergerkiller.bukkit.common.Logging;
|
||||
import com.bergerkiller.bukkit.common.component.LibraryComponent;
|
||||
import com.bergerkiller.bukkit.common.component.LibraryComponentSelector;
|
||||
import com.bergerkiller.bukkit.common.controller.PlayerDataController;
|
||||
import com.bergerkiller.bukkit.common.conversion.type.HandleConversion;
|
||||
import com.bergerkiller.bukkit.common.conversion.type.WrapperConversion;
|
||||
import com.bergerkiller.bukkit.common.nbt.CommonTagCompound;
|
||||
import com.bergerkiller.bukkit.common.utils.CommonUtil;
|
||||
import com.bergerkiller.mountiplex.reflection.ClassHook;
|
||||
import com.bergerkiller.mountiplex.reflection.util.LazyInitializedObject;
|
||||
|
||||
/**
|
||||
@@ -42,99 +34,4 @@ public abstract class PlayerFileDataHandler implements LazyInitializedObject, Li
|
||||
CommonTagCompound base_load_offline(String playerName, String playerUUID);
|
||||
void base_save(HumanEntity human);
|
||||
}
|
||||
|
||||
// hooks WorldNBTStorage
|
||||
@ClassHook.HookPackage("net.minecraft.server")
|
||||
@ClassHook.HookLoadVariables("com.bergerkiller.bukkit.common.Common.TEMPLATE_RESOLVER")
|
||||
protected static class PlayerFileDataHook extends ClassHook<PlayerFileDataHook> implements PlayerFileDataHandler.Hook {
|
||||
private static final boolean LOAD_RETURNS_OPTIONAL = CommonBootstrap.evaluateMCVersion(">=", "1.20.5");
|
||||
private static final boolean HAS_OFFLINE_LOAD = CommonBootstrap.evaluateMCVersion(">=", "1.20.5");
|
||||
public PlayerDataController controller = null;
|
||||
|
||||
@HookMethodCondition("version >= 1.20.5")
|
||||
@HookMethod("public java.util.Optional<net.minecraft.nbt.NBTTagCompound> load(String name, String uuid)")
|
||||
public java.util.Optional<Object> loadOfflineOpt(String name, String uuid) {
|
||||
if (this.controller != null) {
|
||||
CommonTagCompound compound = null;
|
||||
try {
|
||||
compound = this.controller.onLoadOffline(name, uuid);
|
||||
} catch (Throwable t) {
|
||||
Logging.LOGGER.log(Level.SEVERE, "Failed to handle onLoadOffline() on " + this.controller, t);
|
||||
}
|
||||
return (compound == null) ? java.util.Optional.empty()
|
||||
: java.util.Optional.of(compound.getRawHandle());
|
||||
}
|
||||
return base.loadOfflineOpt(name, uuid);
|
||||
}
|
||||
|
||||
@HookMethodCondition("version >= 1.20.5")
|
||||
@HookMethod("public abstract java.util.Optional<net.minecraft.nbt.NBTTagCompound> load(net.minecraft.world.entity.player.EntityHuman paramEntityHuman)")
|
||||
public java.util.Optional<Object> loadOpt(Object entityHuman) {
|
||||
if (this.controller != null) {
|
||||
Player player = CommonUtil.tryCast(WrapperConversion.toEntity(entityHuman), Player.class);
|
||||
if (player != null) {
|
||||
CommonTagCompound compound = null;
|
||||
try {
|
||||
compound = this.controller.onLoad(player);
|
||||
} catch (Throwable t) {
|
||||
Logging.LOGGER.log(Level.SEVERE, "Failed to handle onLoad() on " + this.controller, t);
|
||||
}
|
||||
return (compound == null) ? java.util.Optional.empty()
|
||||
: java.util.Optional.of(compound.getRawHandle());
|
||||
}
|
||||
}
|
||||
return base_load_raw(entityHuman);
|
||||
}
|
||||
|
||||
@HookMethodCondition("version < 1.20.5")
|
||||
@HookMethod("public abstract net.minecraft.nbt.NBTTagCompound load(net.minecraft.world.entity.player.EntityHuman paramEntityHuman)")
|
||||
public Object load(Object entityHuman) {
|
||||
return this.loadOpt(entityHuman).orElse(null);
|
||||
}
|
||||
|
||||
@HookMethod("public abstract void save(net.minecraft.world.entity.player.EntityHuman paramEntityHuman)")
|
||||
public void save(Object entityHuman) {
|
||||
if (this.controller != null) {
|
||||
Player player = CommonUtil.tryCast(WrapperConversion.toEntity(entityHuman), Player.class);
|
||||
if (player != null) {
|
||||
try {
|
||||
this.controller.onSave(player);
|
||||
} catch (Throwable t) {
|
||||
Logging.LOGGER.log(Level.SEVERE, "Failed to handle onSave() on " + this.controller, t);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.base.save(entityHuman);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonTagCompound base_load(HumanEntity human) {
|
||||
return base_load_raw(HandleConversion.toEntityHandle(human))
|
||||
.map(CommonTagCompound::create).orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonTagCompound base_load_offline(String playerName, String playerUUID) {
|
||||
if (HAS_OFFLINE_LOAD) {
|
||||
return base.loadOfflineOpt(playerName, playerUUID)
|
||||
.map(CommonTagCompound::create).orElse(null);
|
||||
} else {
|
||||
throw new UnsupportedOperationException("Not supported on this version of Minecraft");
|
||||
}
|
||||
}
|
||||
|
||||
private java.util.Optional<Object> base_load_raw(Object entityHuman) {
|
||||
if (LOAD_RETURNS_OPTIONAL) {
|
||||
return base.loadOpt(entityHuman);
|
||||
} else {
|
||||
return java.util.Optional.ofNullable(base.load(entityHuman));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void base_save(HumanEntity human) {
|
||||
base.save(HandleConversion.toEntityHandle(human));
|
||||
}
|
||||
}
|
||||
}
|
||||
+101
@@ -1,8 +1,12 @@
|
||||
package com.bergerkiller.bukkit.common.internal.logic;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import com.bergerkiller.bukkit.common.Logging;
|
||||
import com.bergerkiller.bukkit.common.conversion.type.WrapperConversion;
|
||||
import com.bergerkiller.bukkit.common.nbt.CommonTagCompound;
|
||||
import com.bergerkiller.mountiplex.reflection.ClassHook;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.World;
|
||||
|
||||
@@ -20,6 +24,8 @@ import com.bergerkiller.mountiplex.reflection.resolver.Resolver;
|
||||
import com.bergerkiller.mountiplex.reflection.util.FastField;
|
||||
import com.bergerkiller.mountiplex.reflection.util.FastMethod;
|
||||
import com.bergerkiller.reflection.org.bukkit.craftbukkit.CBCraftServer;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
* Handler for Minecraft 1.16 and later
|
||||
@@ -135,6 +141,101 @@ class PlayerFileDataHandler_1_16 extends PlayerFileDataHandler {
|
||||
return hook;
|
||||
}
|
||||
|
||||
// hooks WorldNBTStorage
|
||||
@ClassHook.HookPackage("net.minecraft.server")
|
||||
@ClassHook.HookLoadVariables("com.bergerkiller.bukkit.common.Common.TEMPLATE_RESOLVER")
|
||||
protected static class PlayerFileDataHook extends ClassHook<PlayerFileDataHook> implements PlayerFileDataHandler.Hook {
|
||||
private static final boolean LOAD_RETURNS_OPTIONAL = CommonBootstrap.evaluateMCVersion(">=", "1.20.5");
|
||||
private static final boolean HAS_OFFLINE_LOAD = CommonBootstrap.evaluateMCVersion(">=", "1.20.5");
|
||||
public PlayerDataController controller = null;
|
||||
|
||||
@HookMethodCondition("version >= 1.20.5")
|
||||
@HookMethod("public java.util.Optional<net.minecraft.nbt.NBTTagCompound> load(String name, String uuid)")
|
||||
public java.util.Optional<Object> loadOfflineOpt(String name, String uuid) {
|
||||
if (this.controller != null) {
|
||||
CommonTagCompound compound = null;
|
||||
try {
|
||||
compound = this.controller.onLoadOffline(name, uuid);
|
||||
} catch (Throwable t) {
|
||||
Logging.LOGGER.log(Level.SEVERE, "Failed to handle onLoadOffline() on " + this.controller, t);
|
||||
}
|
||||
return (compound == null) ? java.util.Optional.empty()
|
||||
: java.util.Optional.of(compound.getRawHandle());
|
||||
}
|
||||
return base.loadOfflineOpt(name, uuid);
|
||||
}
|
||||
|
||||
@HookMethodCondition("version >= 1.20.5")
|
||||
@HookMethod("public abstract java.util.Optional<net.minecraft.nbt.NBTTagCompound> load(net.minecraft.world.entity.player.EntityHuman paramEntityHuman)")
|
||||
public java.util.Optional<Object> loadOpt(Object entityHuman) {
|
||||
if (this.controller != null) {
|
||||
Player player = CommonUtil.tryCast(WrapperConversion.toEntity(entityHuman), Player.class);
|
||||
if (player != null) {
|
||||
CommonTagCompound compound = null;
|
||||
try {
|
||||
compound = this.controller.onLoad(player);
|
||||
} catch (Throwable t) {
|
||||
Logging.LOGGER.log(Level.SEVERE, "Failed to handle onLoad() on " + this.controller, t);
|
||||
}
|
||||
return (compound == null) ? java.util.Optional.empty()
|
||||
: java.util.Optional.of(compound.getRawHandle());
|
||||
}
|
||||
}
|
||||
return base_load_raw(entityHuman);
|
||||
}
|
||||
|
||||
@HookMethodCondition("version < 1.20.5")
|
||||
@HookMethod("public abstract net.minecraft.nbt.NBTTagCompound load(net.minecraft.world.entity.player.EntityHuman paramEntityHuman)")
|
||||
public Object load(Object entityHuman) {
|
||||
return this.loadOpt(entityHuman).orElse(null);
|
||||
}
|
||||
|
||||
@HookMethod("public abstract void save(net.minecraft.world.entity.player.EntityHuman paramEntityHuman)")
|
||||
public void save(Object entityHuman) {
|
||||
if (this.controller != null) {
|
||||
Player player = CommonUtil.tryCast(WrapperConversion.toEntity(entityHuman), Player.class);
|
||||
if (player != null) {
|
||||
try {
|
||||
this.controller.onSave(player);
|
||||
} catch (Throwable t) {
|
||||
Logging.LOGGER.log(Level.SEVERE, "Failed to handle onSave() on " + this.controller, t);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.base.save(entityHuman);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonTagCompound base_load(HumanEntity human) {
|
||||
return base_load_raw(HandleConversion.toEntityHandle(human))
|
||||
.map(CommonTagCompound::create).orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonTagCompound base_load_offline(String playerName, String playerUUID) {
|
||||
if (HAS_OFFLINE_LOAD) {
|
||||
return base.loadOfflineOpt(playerName, playerUUID)
|
||||
.map(CommonTagCompound::create).orElse(null);
|
||||
} else {
|
||||
throw new UnsupportedOperationException("Not supported on this version of Minecraft");
|
||||
}
|
||||
}
|
||||
|
||||
private java.util.Optional<Object> base_load_raw(Object entityHuman) {
|
||||
if (LOAD_RETURNS_OPTIONAL) {
|
||||
return base.loadOpt(entityHuman);
|
||||
} else {
|
||||
return java.util.Optional.ofNullable(base.load(entityHuman));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void base_save(HumanEntity human) {
|
||||
base.save(HandleConversion.toEntityHandle(human));
|
||||
}
|
||||
}
|
||||
|
||||
public static enum HookAction {
|
||||
HOOK, UNHOOK, MOCK, GET
|
||||
}
|
||||
|
||||
+66
@@ -1,8 +1,12 @@
|
||||
package com.bergerkiller.bukkit.common.internal.logic;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import com.bergerkiller.bukkit.common.Logging;
|
||||
import com.bergerkiller.bukkit.common.conversion.type.WrapperConversion;
|
||||
import com.bergerkiller.bukkit.common.nbt.CommonTagCompound;
|
||||
import com.bergerkiller.mountiplex.reflection.ClassHook;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.World;
|
||||
|
||||
@@ -18,6 +22,8 @@ import com.bergerkiller.mountiplex.reflection.declarations.SourceDeclaration;
|
||||
import com.bergerkiller.mountiplex.reflection.util.FastField;
|
||||
import com.bergerkiller.mountiplex.reflection.util.FastMethod;
|
||||
import com.bergerkiller.reflection.org.bukkit.craftbukkit.CBCraftServer;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
* Handler for Minecraft 1.8 to Minecraft 1.15.2
|
||||
@@ -122,4 +128,64 @@ class PlayerFileDataHandler_1_8_to_1_15_2 extends PlayerFileDataHandler {
|
||||
public static enum HookAction {
|
||||
HOOK, UNHOOK, MOCK, GET
|
||||
}
|
||||
|
||||
// hooks WorldNBTStorage
|
||||
@ClassHook.HookPackage("net.minecraft.server")
|
||||
@ClassHook.HookLoadVariables("com.bergerkiller.bukkit.common.Common.TEMPLATE_RESOLVER")
|
||||
protected static class PlayerFileDataHook extends ClassHook<PlayerFileDataHook> implements PlayerFileDataHandler.Hook {
|
||||
public PlayerDataController controller = null;
|
||||
|
||||
@HookMethod("public abstract net.minecraft.nbt.NBTTagCompound load(net.minecraft.world.entity.player.EntityHuman paramEntityHuman)")
|
||||
public Object load(Object entityHuman) {
|
||||
if (this.controller != null) {
|
||||
Player player = CommonUtil.tryCast(WrapperConversion.toEntity(entityHuman), Player.class);
|
||||
if (player != null) {
|
||||
CommonTagCompound compound = null;
|
||||
try {
|
||||
compound = this.controller.onLoad(player);
|
||||
} catch (Throwable t) {
|
||||
Logging.LOGGER.log(Level.SEVERE, "Failed to handle onLoad() on " + this.controller, t);
|
||||
}
|
||||
return (compound == null) ? null : compound.getRawHandle();
|
||||
}
|
||||
}
|
||||
return base_load_raw(entityHuman).orElse(null);
|
||||
}
|
||||
|
||||
@HookMethod("public abstract void save(net.minecraft.world.entity.player.EntityHuman paramEntityHuman)")
|
||||
public void save(Object entityHuman) {
|
||||
if (this.controller != null) {
|
||||
Player player = CommonUtil.tryCast(WrapperConversion.toEntity(entityHuman), Player.class);
|
||||
if (player != null) {
|
||||
try {
|
||||
this.controller.onSave(player);
|
||||
} catch (Throwable t) {
|
||||
Logging.LOGGER.log(Level.SEVERE, "Failed to handle onSave() on " + this.controller, t);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.base.save(entityHuman);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonTagCompound base_load(HumanEntity human) {
|
||||
return base_load_raw(HandleConversion.toEntityHandle(human))
|
||||
.map(CommonTagCompound::create).orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonTagCompound base_load_offline(String playerName, String playerUUID) {
|
||||
throw new UnsupportedOperationException("Not supported on this version of Minecraft");
|
||||
}
|
||||
|
||||
private java.util.Optional<Object> base_load_raw(Object entityHuman) {
|
||||
return java.util.Optional.ofNullable(base.load(entityHuman));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void base_save(HumanEntity human) {
|
||||
base.save(HandleConversion.toEntityHandle(human));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user