Compare commits

...

11 Commits
3.0.6 ... 3.1.2

Author SHA1 Message Date
Jikoo
32ec8d8147 Bump version to 3.1.2 for release 2017-02-13 20:01:18 -05:00
Jikoo
443e0c489e Synchronize cache (#63) 2017-02-13 19:56:32 -05:00
Jikoo
7ab0003b62 Bump version to 3.1.2-SNAPSHOT for development 2017-01-30 13:38:36 -05:00
Jikoo
12c0cac311 Bump version to 3.1.1 for release 2017-01-30 13:38:10 -05:00
Jikoo
f54481e872 Fix (NoSuchMethod)Exception being caught instead of NoSuchMethodError
Closes #62
2017-01-30 13:35:58 -05:00
Jikoo
f27dd8a233 Bump version to 3.1.1-SNAPSHOT for development 2017-01-20 13:02:47 -05:00
Jikoo
d6df1a0871 Bump version to 3.1.0 for release 2017-01-20 12:59:03 -05:00
Jikoo
e34e51d127 Better support other Player implementations
Closes #60
Removed all volatile comments - they require me to occasionally manually maintain them and NMS/OBC imports are already kept separate
2017-01-20 12:56:31 -05:00
Jikoo
5ca2ae461a Properly use Maven versioning for better support of dependent plugins
Closes #59
Bumped version to 3.1.0-SNAPSHOT for development, really should have bumped the minor version a while back.
2017-01-17 18:06:35 -05:00
Jikoo
4095e8039d RIPo.bukkit.org
repo.bukkit.org is dead, Spigot doesn't host builds that old. Didn't realize that I'd installed it locally when compiling CB 1.4.5 to use with OpenInv. Whoops.

Corrected dependency order - no idea why this compiled at all before. My bad.
2017-01-15 08:08:51 -05:00
Jikoo
73f390ab20 Jitpack's Maven version is pretty outdated. Hopefully fixes build.
The `all` profile is no longer active by default, just in case.
2017-01-15 07:33:53 -05:00
145 changed files with 871 additions and 565 deletions

2
.gitignore vendored
View File

@@ -5,6 +5,6 @@
**/.idea **/.idea
**/target **/target
**/bin **/bin
**/lib
**/out **/out
**dependency-reduced-pom.xml **dependency-reduced-pom.xml
**pom.xml.versionsBackup

View File

@@ -5,7 +5,7 @@
<parent> <parent>
<groupId>com.lishid</groupId> <groupId>com.lishid</groupId>
<artifactId>openinvparent</artifactId> <artifactId>openinvparent</artifactId>
<version>1.0-SNAPSHOT</version> <version>3.1.2</version>
</parent> </parent>
<artifactId>openinvapi</artifactId> <artifactId>openinvapi</artifactId>
@@ -16,7 +16,8 @@
<groupId>org.bukkit</groupId> <groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId> <artifactId>bukkit</artifactId>
<version>1.4.5-R1.0</version> <version>1.4.5-R1.0</version>
<scope>provided</scope> <scope>system</scope>
<systemPath>${project.basedir}/../lib/bukkit-1.4.5-R1.0.jar</systemPath>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@@ -5,7 +5,7 @@
<parent> <parent>
<groupId>com.lishid</groupId> <groupId>com.lishid</groupId>
<artifactId>openinvparent</artifactId> <artifactId>openinvparent</artifactId>
<version>1.0-SNAPSHOT</version> <version>3.1.2</version>
</parent> </parent>
<artifactId>openinvassembly</artifactId> <artifactId>openinvassembly</artifactId>

View File

@@ -5,7 +5,7 @@
<parent> <parent>
<groupId>com.lishid</groupId> <groupId>com.lishid</groupId>
<artifactId>openinvparent</artifactId> <artifactId>openinvparent</artifactId>
<version>1.0-SNAPSHOT</version> <version>3.1.2</version>
</parent> </parent>
<artifactId>openinvcommon</artifactId> <artifactId>openinvcommon</artifactId>
@@ -16,13 +16,13 @@
<groupId>org.bukkit</groupId> <groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId> <artifactId>bukkit</artifactId>
<version>1.4.5-R1.0</version> <version>1.4.5-R1.0</version>
<scope>provided</scope> <scope>system</scope>
<systemPath>${project.basedir}/../lib/bukkit-1.4.5-R1.0.jar</systemPath>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.lishid</groupId> <groupId>com.lishid</groupId>
<artifactId>openinvapi</artifactId> <artifactId>openinvapi</artifactId>
<version>1.0-SNAPSHOT</version> <version>3.1.2</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@@ -9,7 +9,7 @@ import com.google.common.collect.Multimap;
import com.google.common.collect.TreeMultimap; import com.google.common.collect.TreeMultimap;
/** /**
* A minimal time-based cache implementation backed by a HashMap and TreeMultimap. * A minimal thread-safe time-based cache implementation backed by a HashMap and TreeMultimap.
* *
* @author Jikoo * @author Jikoo
*/ */
@@ -59,9 +59,11 @@ public class Cache<K, V> {
// Invalidate key - runs lazy check and ensures value won't be cleaned up early // Invalidate key - runs lazy check and ensures value won't be cleaned up early
invalidate(key); invalidate(key);
synchronized (internal) {
internal.put(key, value); internal.put(key, value);
expiry.put(System.currentTimeMillis() + retention, key); expiry.put(System.currentTimeMillis() + retention, key);
} }
}
/** /**
* Returns the value to which the specified key is mapped, or null if no value is mapped for the key. * Returns the value to which the specified key is mapped, or null if no value is mapped for the key.
@@ -70,11 +72,13 @@ public class Cache<K, V> {
* @return the value to which the specified key is mapped, or null if no value is mapped for the key * @return the value to which the specified key is mapped, or null if no value is mapped for the key
*/ */
public V get(K key) { public V get(K key) {
synchronized (internal) {
// Run lazy check to clean cache // Run lazy check to clean cache
lazyCheck(); lazyCheck();
return internal.get(key); return internal.get(key);
} }
}
/** /**
* Returns true if the specified key is mapped to a value. * Returns true if the specified key is mapped to a value.
@@ -83,11 +87,13 @@ public class Cache<K, V> {
* @return true if a mapping exists for the specified key * @return true if a mapping exists for the specified key
*/ */
public boolean containsKey(K key) { public boolean containsKey(K key) {
synchronized (internal) {
// Run lazy check to clean cache // Run lazy check to clean cache
lazyCheck(); lazyCheck();
return internal.containsKey(key); return internal.containsKey(key);
} }
}
/** /**
* Forcibly invalidates a key, even if it is considered to be in use. * Forcibly invalidates a key, even if it is considered to be in use.
@@ -95,6 +101,7 @@ public class Cache<K, V> {
* @param key key to invalidate * @param key key to invalidate
*/ */
public void invalidate(K key) { public void invalidate(K key) {
synchronized (internal) {
// Run lazy check to clean cache // Run lazy check to clean cache
lazyCheck(); lazyCheck();
@@ -114,17 +121,20 @@ public class Cache<K, V> {
} }
} }
} }
}
/** /**
* Forcibly invalidates all keys, even if they are considered to be in use. * Forcibly invalidates all keys, even if they are considered to be in use.
*/ */
public void invalidateAll() { public void invalidateAll() {
synchronized (internal) {
for (V value : internal.values()) { for (V value : internal.values()) {
postRemoval.run(value); postRemoval.run(value);
} }
expiry.clear(); expiry.clear();
internal.clear(); internal.clear();
} }
}
/** /**
* Invalidate all expired keys that are not considered in use. If a key is expired but is * Invalidate all expired keys that are not considered in use. If a key is expired but is

View File

@@ -5,24 +5,24 @@
<parent> <parent>
<groupId>com.lishid</groupId> <groupId>com.lishid</groupId>
<artifactId>openinvinternal</artifactId> <artifactId>openinvinternal</artifactId>
<version>1.0-SNAPSHOT</version> <version>3.1.2</version>
</parent> </parent>
<artifactId>openinvadapter1_4_5</artifactId> <artifactId>openinvadapter1_4_5</artifactId>
<name>OpenInvAdapter1_4_5</name> <name>OpenInvAdapter1_4_5</name>
<dependencies> <dependencies>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>org.bukkit</groupId> <groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId> <artifactId>craftbukkit</artifactId>
<version>1.4.5-R1.0</version> <version>1.4.5-R1.0</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>3.1.2</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -22,7 +22,6 @@ import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_4_5.AxisAlignedBB; import net.minecraft.server.v1_4_5.AxisAlignedBB;
import net.minecraft.server.v1_4_5.BlockEnderChest; import net.minecraft.server.v1_4_5.BlockEnderChest;
import net.minecraft.server.v1_4_5.Container; import net.minecraft.server.v1_4_5.Container;
@@ -36,7 +35,6 @@ import net.minecraft.server.v1_4_5.TileEntityChest;
import net.minecraft.server.v1_4_5.TileEntityEnderChest; import net.minecraft.server.v1_4_5.TileEntityEnderChest;
import net.minecraft.server.v1_4_5.World; import net.minecraft.server.v1_4_5.World;
import org.bukkit.craftbukkit.v1_4_5.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_4_5.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_4_5.event.CraftEventFactory;
public class AnySilentContainer implements IAnySilentContainer { public class AnySilentContainer implements IAnySilentContainer {
@@ -49,7 +47,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) { public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) {
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest // FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
World world = player.world; World world = player.world;
if (block instanceof BlockEnderChest) { if (block instanceof BlockEnderChest) {
@@ -97,7 +95,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) { public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) {
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
// Silent ender chest is API-only // Silent ender chest is API-only
if (silentchest && block.getType() == Material.ENDER_CHEST) { if (silentchest && block.getType() == Material.ENDER_CHEST) {

View File

@@ -23,7 +23,6 @@ import com.lishid.openinv.util.InternalAccessor;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_4_5.IInventory; import net.minecraft.server.v1_4_5.IInventory;
import org.bukkit.craftbukkit.v1_4_5.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_4_5.inventory.CraftInventory;

View File

@@ -23,14 +23,15 @@ import com.lishid.openinv.internal.IPlayerDataManager;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_4_5.EntityPlayer; import net.minecraft.server.v1_4_5.EntityPlayer;
import net.minecraft.server.v1_4_5.ItemInWorldManager; import net.minecraft.server.v1_4_5.ItemInWorldManager;
import net.minecraft.server.v1_4_5.MinecraftServer; import net.minecraft.server.v1_4_5.MinecraftServer;
import org.bukkit.craftbukkit.v1_4_5.CraftServer; import org.bukkit.craftbukkit.v1_4_5.CraftServer;
import org.bukkit.craftbukkit.v1_4_5.entity.CraftPlayer;
public class PlayerDataManager implements IPlayerDataManager { public class PlayerDataManager implements IPlayerDataManager {
@@ -77,4 +78,24 @@ public class PlayerDataManager implements IPlayerDataManager {
return Arrays.asList(Bukkit.getOnlinePlayers()); return Arrays.asList(Bukkit.getOnlinePlayers());
} }
public static EntityPlayer getHandle(Player player) {
if (player instanceof CraftPlayer) {
return ((CraftPlayer) player).getHandle();
}
Server server = player.getServer();
EntityPlayer nmsPlayer = null;
if (server instanceof CraftServer) {
nmsPlayer = ((CraftServer) server).getHandle().f(player.getName());
}
if (nmsPlayer == null) {
// Could use reflection to examine fields, but it's honestly not worth the bother.
throw new RuntimeException("Unable to fetch EntityPlayer from provided Player implementation");
}
return nmsPlayer;
}
} }

View File

@@ -16,7 +16,6 @@
package com.lishid.openinv.internal.v1_4_5; package com.lishid.openinv.internal.v1_4_5;
// Volatile
import net.minecraft.server.v1_4_5.ContainerChest; import net.minecraft.server.v1_4_5.ContainerChest;
import net.minecraft.server.v1_4_5.EntityHuman; import net.minecraft.server.v1_4_5.EntityHuman;
import net.minecraft.server.v1_4_5.IInventory; import net.minecraft.server.v1_4_5.IInventory;

View File

@@ -27,7 +27,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
// Volatile import net.minecraft.server.v1_4_5.EntityPlayer;
import net.minecraft.server.v1_4_5.IInventory; import net.minecraft.server.v1_4_5.IInventory;
import net.minecraft.server.v1_4_5.InventoryEnderChest; import net.minecraft.server.v1_4_5.InventoryEnderChest;
import net.minecraft.server.v1_4_5.InventorySubcontainer; import net.minecraft.server.v1_4_5.InventorySubcontainer;
@@ -46,12 +46,12 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
private CraftPlayer owner; private CraftPlayer owner;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
public SpecialEnderChest(Player p, Boolean online) { public SpecialEnderChest(Player player, Boolean online) {
super(((CraftPlayer) p).getHandle().getEnderChest().getName(), super(((CraftPlayer) player).getHandle().getEnderChest().getName(),
((CraftPlayer) p).getHandle().getEnderChest().getSize()); ((CraftPlayer) player).getHandle().getEnderChest().getSize());
CraftPlayer player = (CraftPlayer) p; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
this.enderChest = player.getHandle().getEnderChest(); this.enderChest = nmsPlayer.getEnderChest();
this.owner = player; this.owner = nmsPlayer.getBukkitEntity();
this.items = enderChest.getContents(); this.items = enderChest.getContents();
} }
@@ -64,8 +64,9 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
owner = (CraftPlayer) player; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest(); this.owner = nmsPlayer.getBukkitEntity();
InventoryEnderChest playerEnderChest = nmsPlayer.getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);

View File

@@ -21,11 +21,9 @@ import com.lishid.openinv.internal.ISpecialPlayerInventory;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_4_5.ItemStack; import net.minecraft.server.v1_4_5.ItemStack;
import net.minecraft.server.v1_4_5.PlayerInventory; import net.minecraft.server.v1_4_5.PlayerInventory;
import org.bukkit.craftbukkit.v1_4_5.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_4_5.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_4_5.inventory.CraftInventory;
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory { public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
@@ -35,7 +33,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
private boolean playerOnline = false; private boolean playerOnline = false;
public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) { public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) {
super(((CraftPlayer) bukkitPlayer).getHandle()); super(PlayerDataManager.getHandle(bukkitPlayer));
this.playerOnline = online; this.playerOnline = online;
this.items = player.inventory.items; this.items = player.inventory.items;
this.armor = player.inventory.armor; this.armor = player.inventory.armor;
@@ -49,7 +47,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override @Override
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
this.player = ((CraftPlayer) player).getHandle(); this.player = PlayerDataManager.getHandle(player);
this.player.inventory.items = this.items; this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor; this.player.inventory.armor = this.armor;
playerOnline = true; playerOnline = true;

View File

@@ -5,24 +5,24 @@
<parent> <parent>
<groupId>com.lishid</groupId> <groupId>com.lishid</groupId>
<artifactId>openinvinternal</artifactId> <artifactId>openinvinternal</artifactId>
<version>1.0-SNAPSHOT</version> <version>3.1.2</version>
</parent> </parent>
<artifactId>openinvadapter1_4_6</artifactId> <artifactId>openinvadapter1_4_6</artifactId>
<name>OpenInvAdapter1_4_6</name> <name>OpenInvAdapter1_4_6</name>
<dependencies> <dependencies>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>org.bukkit</groupId> <groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId> <artifactId>craftbukkit</artifactId>
<version>1.4.6-R0.3</version> <version>1.4.6-R0.3</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>3.1.2</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -22,7 +22,6 @@ import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_4_6.AxisAlignedBB; import net.minecraft.server.v1_4_6.AxisAlignedBB;
import net.minecraft.server.v1_4_6.BlockEnderChest; import net.minecraft.server.v1_4_6.BlockEnderChest;
import net.minecraft.server.v1_4_6.Container; import net.minecraft.server.v1_4_6.Container;
@@ -36,7 +35,6 @@ import net.minecraft.server.v1_4_6.TileEntityChest;
import net.minecraft.server.v1_4_6.TileEntityEnderChest; import net.minecraft.server.v1_4_6.TileEntityEnderChest;
import net.minecraft.server.v1_4_6.World; import net.minecraft.server.v1_4_6.World;
import org.bukkit.craftbukkit.v1_4_6.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_4_6.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_4_6.event.CraftEventFactory;
public class AnySilentContainer implements IAnySilentContainer { public class AnySilentContainer implements IAnySilentContainer {
@@ -49,7 +47,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) { public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) {
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest // FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
World world = player.world; World world = player.world;
if (block instanceof BlockEnderChest) { if (block instanceof BlockEnderChest) {
@@ -97,7 +95,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) { public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) {
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
// Silent ender chest is API-only // Silent ender chest is API-only
if (silentchest && block.getType() == Material.ENDER_CHEST) { if (silentchest && block.getType() == Material.ENDER_CHEST) {

View File

@@ -23,7 +23,6 @@ import com.lishid.openinv.util.InternalAccessor;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_4_6.IInventory; import net.minecraft.server.v1_4_6.IInventory;
import org.bukkit.craftbukkit.v1_4_6.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_4_6.inventory.CraftInventory;

View File

@@ -23,14 +23,15 @@ import com.lishid.openinv.internal.IPlayerDataManager;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_4_6.EntityPlayer; import net.minecraft.server.v1_4_6.EntityPlayer;
import net.minecraft.server.v1_4_6.MinecraftServer; import net.minecraft.server.v1_4_6.MinecraftServer;
import net.minecraft.server.v1_4_6.PlayerInteractManager; import net.minecraft.server.v1_4_6.PlayerInteractManager;
import org.bukkit.craftbukkit.v1_4_6.CraftServer; import org.bukkit.craftbukkit.v1_4_6.CraftServer;
import org.bukkit.craftbukkit.v1_4_6.entity.CraftPlayer;
public class PlayerDataManager implements IPlayerDataManager { public class PlayerDataManager implements IPlayerDataManager {
@@ -77,4 +78,24 @@ public class PlayerDataManager implements IPlayerDataManager {
return Arrays.asList(Bukkit.getOnlinePlayers()); return Arrays.asList(Bukkit.getOnlinePlayers());
} }
public static EntityPlayer getHandle(Player player) {
if (player instanceof CraftPlayer) {
return ((CraftPlayer) player).getHandle();
}
Server server = player.getServer();
EntityPlayer nmsPlayer = null;
if (server instanceof CraftServer) {
nmsPlayer = ((CraftServer) server).getHandle().f(player.getName());
}
if (nmsPlayer == null) {
// Could use reflection to examine fields, but it's honestly not worth the bother.
throw new RuntimeException("Unable to fetch EntityPlayer from provided Player implementation");
}
return nmsPlayer;
}
} }

View File

@@ -16,7 +16,6 @@
package com.lishid.openinv.internal.v1_4_6; package com.lishid.openinv.internal.v1_4_6;
// Volatile
import net.minecraft.server.v1_4_6.ContainerChest; import net.minecraft.server.v1_4_6.ContainerChest;
import net.minecraft.server.v1_4_6.EntityHuman; import net.minecraft.server.v1_4_6.EntityHuman;
import net.minecraft.server.v1_4_6.IInventory; import net.minecraft.server.v1_4_6.IInventory;

View File

@@ -27,7 +27,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
// Volatile import net.minecraft.server.v1_4_6.EntityPlayer;
import net.minecraft.server.v1_4_6.IInventory; import net.minecraft.server.v1_4_6.IInventory;
import net.minecraft.server.v1_4_6.InventoryEnderChest; import net.minecraft.server.v1_4_6.InventoryEnderChest;
import net.minecraft.server.v1_4_6.InventorySubcontainer; import net.minecraft.server.v1_4_6.InventorySubcontainer;
@@ -46,12 +46,12 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
private CraftPlayer owner; private CraftPlayer owner;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
public SpecialEnderChest(Player p, Boolean online) { public SpecialEnderChest(Player player, Boolean online) {
super(((CraftPlayer) p).getHandle().getEnderChest().getName(), super(((CraftPlayer) player).getHandle().getEnderChest().getName(),
((CraftPlayer) p).getHandle().getEnderChest().getSize()); ((CraftPlayer) player).getHandle().getEnderChest().getSize());
CraftPlayer player = (CraftPlayer) p; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
this.enderChest = player.getHandle().getEnderChest(); this.enderChest = nmsPlayer.getEnderChest();
this.owner = player; this.owner = nmsPlayer.getBukkitEntity();
this.items = enderChest.getContents(); this.items = enderChest.getContents();
} }
@@ -64,8 +64,9 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
owner = (CraftPlayer) player; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest(); this.owner = nmsPlayer.getBukkitEntity();
InventoryEnderChest playerEnderChest = nmsPlayer.getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);

View File

@@ -21,11 +21,9 @@ import com.lishid.openinv.internal.ISpecialPlayerInventory;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_4_6.ItemStack; import net.minecraft.server.v1_4_6.ItemStack;
import net.minecraft.server.v1_4_6.PlayerInventory; import net.minecraft.server.v1_4_6.PlayerInventory;
import org.bukkit.craftbukkit.v1_4_6.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_4_6.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_4_6.inventory.CraftInventory;
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory { public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
@@ -35,7 +33,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
private boolean playerOnline = false; private boolean playerOnline = false;
public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) { public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) {
super(((CraftPlayer) bukkitPlayer).getHandle()); super(PlayerDataManager.getHandle(bukkitPlayer));
this.playerOnline = online; this.playerOnline = online;
this.items = player.inventory.items; this.items = player.inventory.items;
this.armor = player.inventory.armor; this.armor = player.inventory.armor;
@@ -49,7 +47,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override @Override
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
this.player = ((CraftPlayer) player).getHandle(); this.player = PlayerDataManager.getHandle(player);
this.player.inventory.items = this.items; this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor; this.player.inventory.armor = this.armor;
playerOnline = true; playerOnline = true;

View File

@@ -5,7 +5,7 @@
<parent> <parent>
<groupId>com.lishid</groupId> <groupId>com.lishid</groupId>
<artifactId>openinvparent</artifactId> <artifactId>openinvparent</artifactId>
<version>1.0-SNAPSHOT</version> <version>3.1.2</version>
</parent> </parent>
<artifactId>openinvinternal</artifactId> <artifactId>openinvinternal</artifactId>

View File

@@ -5,24 +5,24 @@
<parent> <parent>
<groupId>com.lishid</groupId> <groupId>com.lishid</groupId>
<artifactId>openinvinternal</artifactId> <artifactId>openinvinternal</artifactId>
<version>1.0-SNAPSHOT</version> <version>3.1.2</version>
</parent> </parent>
<artifactId>openinvadapter1_10_R1</artifactId> <artifactId>openinvadapter1_10_R1</artifactId>
<name>OpenInvAdapter1_10_R1</name> <name>OpenInvAdapter1_10_R1</name>
<dependencies> <dependencies>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>org.spigotmc</groupId> <groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId> <artifactId>spigot</artifactId>
<version>1.10-R0.1-SNAPSHOT</version> <version>1.10-R0.1-SNAPSHOT</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>3.1.2</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -22,7 +22,6 @@ import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_10_R1.AxisAlignedBB; import net.minecraft.server.v1_10_R1.AxisAlignedBB;
import net.minecraft.server.v1_10_R1.Block; import net.minecraft.server.v1_10_R1.Block;
import net.minecraft.server.v1_10_R1.BlockChest; import net.minecraft.server.v1_10_R1.BlockChest;
@@ -43,7 +42,6 @@ import net.minecraft.server.v1_10_R1.TileEntityChest;
import net.minecraft.server.v1_10_R1.TileEntityEnderChest; import net.minecraft.server.v1_10_R1.TileEntityEnderChest;
import net.minecraft.server.v1_10_R1.World; import net.minecraft.server.v1_10_R1.World;
import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_10_R1.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_10_R1.event.CraftEventFactory;
public class AnySilentContainer implements IAnySilentContainer { public class AnySilentContainer implements IAnySilentContainer {
@@ -55,7 +53,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block b) { public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block b) {
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
World world = player.world; World world = player.world;
BlockPosition blockPosition = new BlockPosition(b.getX(), b.getY(), b.getZ()); BlockPosition blockPosition = new BlockPosition(b.getX(), b.getY(), b.getZ());
Block block = world.getType(blockPosition).getBlock(); Block block = world.getType(blockPosition).getBlock();
@@ -114,7 +112,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block b) { public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block b) {
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
// Silent ender chest is pretty much API-only // Silent ender chest is pretty much API-only
if (silentchest && b.getType() == Material.ENDER_CHEST) { if (silentchest && b.getType() == Material.ENDER_CHEST) {

View File

@@ -23,7 +23,6 @@ import com.lishid.openinv.util.InternalAccessor;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_10_R1.IInventory; import net.minecraft.server.v1_10_R1.IInventory;
import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftInventory;

View File

@@ -25,14 +25,15 @@ import com.mojang.authlib.GameProfile;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_10_R1.EntityPlayer; import net.minecraft.server.v1_10_R1.EntityPlayer;
import net.minecraft.server.v1_10_R1.MinecraftServer; import net.minecraft.server.v1_10_R1.MinecraftServer;
import net.minecraft.server.v1_10_R1.PlayerInteractManager; import net.minecraft.server.v1_10_R1.PlayerInteractManager;
import org.bukkit.craftbukkit.v1_10_R1.CraftServer; import org.bukkit.craftbukkit.v1_10_R1.CraftServer;
import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer;
public class PlayerDataManager implements IPlayerDataManager { public class PlayerDataManager implements IPlayerDataManager {
@@ -85,4 +86,24 @@ public class PlayerDataManager implements IPlayerDataManager {
return Bukkit.getOnlinePlayers(); return Bukkit.getOnlinePlayers();
} }
public static EntityPlayer getHandle(Player player) {
if (player instanceof CraftPlayer) {
return ((CraftPlayer) player).getHandle();
}
Server server = player.getServer();
EntityPlayer nmsPlayer = null;
if (server instanceof CraftServer) {
nmsPlayer = ((CraftServer) server).getHandle().getPlayer(player.getName());
}
if (nmsPlayer == null) {
// Could use reflection to examine fields, but it's honestly not worth the bother.
throw new RuntimeException("Unable to fetch EntityPlayer from provided Player implementation");
}
return nmsPlayer;
}
} }

View File

@@ -16,7 +16,6 @@
package com.lishid.openinv.internal.v1_10_R1; package com.lishid.openinv.internal.v1_10_R1;
// Volatile
import net.minecraft.server.v1_10_R1.ContainerChest; import net.minecraft.server.v1_10_R1.ContainerChest;
import net.minecraft.server.v1_10_R1.EntityHuman; import net.minecraft.server.v1_10_R1.EntityHuman;
import net.minecraft.server.v1_10_R1.IInventory; import net.minecraft.server.v1_10_R1.IInventory;

View File

@@ -24,13 +24,12 @@ import com.lishid.openinv.internal.ISpecialEnderChest;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile import net.minecraft.server.v1_10_R1.EntityPlayer;
import net.minecraft.server.v1_10_R1.IInventory; import net.minecraft.server.v1_10_R1.IInventory;
import net.minecraft.server.v1_10_R1.InventoryEnderChest; import net.minecraft.server.v1_10_R1.InventoryEnderChest;
import net.minecraft.server.v1_10_R1.InventorySubcontainer; import net.minecraft.server.v1_10_R1.InventorySubcontainer;
import net.minecraft.server.v1_10_R1.ItemStack; import net.minecraft.server.v1_10_R1.ItemStack;
import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftInventory;
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest { public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
@@ -40,12 +39,12 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
private boolean playerOnline = false; private boolean playerOnline = false;
public SpecialEnderChest(Player player, Boolean online) { public SpecialEnderChest(Player player, Boolean online) {
super(((CraftPlayer) player).getHandle().getEnderChest().getName(), super(PlayerDataManager.getHandle(player).getEnderChest().getName(),
((CraftPlayer) player).getHandle().getEnderChest().hasCustomName(), PlayerDataManager.getHandle(player).getEnderChest().hasCustomName(),
((CraftPlayer) player).getHandle().getEnderChest().getSize()); PlayerDataManager.getHandle(player).getEnderChest().getSize());
CraftPlayer craftPlayer = (CraftPlayer) player; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
this.enderChest = craftPlayer.getHandle().getEnderChest(); this.enderChest = nmsPlayer.getEnderChest();
this.bukkitOwner = craftPlayer; this.bukkitOwner = nmsPlayer.getBukkitEntity();
setItemArrays(this, enderChest.getContents()); setItemArrays(this, enderChest.getContents());
} }
@@ -78,9 +77,9 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
this.bukkitOwner = player; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
CraftPlayer craftPlayer = (CraftPlayer) player; this.bukkitOwner = nmsPlayer.getBukkitEntity();
setItemArrays(craftPlayer.getHandle().getEnderChest(), this.items); setItemArrays(nmsPlayer.getEnderChest(), this.items);
} catch (Exception e) {} } catch (Exception e) {}
playerOnline = true; playerOnline = true;
} }

View File

@@ -24,12 +24,10 @@ import com.lishid.openinv.internal.ISpecialPlayerInventory;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_10_R1.EntityHuman; import net.minecraft.server.v1_10_R1.EntityHuman;
import net.minecraft.server.v1_10_R1.ItemStack; import net.minecraft.server.v1_10_R1.ItemStack;
import net.minecraft.server.v1_10_R1.PlayerInventory; import net.minecraft.server.v1_10_R1.PlayerInventory;
import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftInventory;
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory { public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
@@ -39,7 +37,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
private boolean playerOnline = false; private boolean playerOnline = false;
public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) { public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) {
super(((CraftPlayer) bukkitPlayer).getHandle()); super(PlayerDataManager.getHandle(bukkitPlayer));
this.playerOnline = online; this.playerOnline = online;
setItemArrays(this, player.inventory.items, player.inventory.armor, player.inventory.extraSlots); setItemArrays(this, player.inventory.items, player.inventory.armor, player.inventory.extraSlots);
} }
@@ -89,7 +87,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override @Override
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
this.player = ((CraftPlayer) player).getHandle(); this.player = PlayerDataManager.getHandle(player);
setItemArrays(this.player.inventory, items, armor, extraSlots); setItemArrays(this.player.inventory, items, armor, extraSlots);
playerOnline = true; playerOnline = true;
} }

View File

@@ -5,24 +5,24 @@
<parent> <parent>
<groupId>com.lishid</groupId> <groupId>com.lishid</groupId>
<artifactId>openinvinternal</artifactId> <artifactId>openinvinternal</artifactId>
<version>1.0-SNAPSHOT</version> <version>3.1.2</version>
</parent> </parent>
<artifactId>openinvadapter1_11_R1</artifactId> <artifactId>openinvadapter1_11_R1</artifactId>
<name>OpenInvAdapter1_11_R1</name> <name>OpenInvAdapter1_11_R1</name>
<dependencies> <dependencies>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>org.spigotmc</groupId> <groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId> <artifactId>spigot</artifactId>
<version>1.11.2-R0.1-SNAPSHOT</version> <version>1.11.2-R0.1-SNAPSHOT</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>3.1.2</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -25,7 +25,6 @@ import org.bukkit.block.BlockState;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
// Volatile
import net.minecraft.server.v1_11_R1.AxisAlignedBB; import net.minecraft.server.v1_11_R1.AxisAlignedBB;
import net.minecraft.server.v1_11_R1.Block; import net.minecraft.server.v1_11_R1.Block;
import net.minecraft.server.v1_11_R1.BlockChest; import net.minecraft.server.v1_11_R1.BlockChest;
@@ -49,7 +48,6 @@ import net.minecraft.server.v1_11_R1.TileEntityEnderChest;
import net.minecraft.server.v1_11_R1.TileEntityShulkerBox; import net.minecraft.server.v1_11_R1.TileEntityShulkerBox;
import net.minecraft.server.v1_11_R1.World; import net.minecraft.server.v1_11_R1.World;
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_11_R1.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_11_R1.event.CraftEventFactory;
public class AnySilentContainer implements IAnySilentContainer { public class AnySilentContainer implements IAnySilentContainer {
@@ -65,7 +63,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block b) { public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block b) {
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
World world = player.world; World world = player.world;
BlockPosition blockPosition = new BlockPosition(b.getX(), b.getY(), b.getZ()); BlockPosition blockPosition = new BlockPosition(b.getX(), b.getY(), b.getZ());
IBlockData blockData = world.getType(blockPosition); IBlockData blockData = world.getType(blockPosition);
@@ -125,7 +123,7 @@ public class AnySilentContainer implements IAnySilentContainer {
try { try {
// 1.11.2 // 1.11.2
return world.a(axisAlignedBB.a(blockPosition.shift(enumDirection))); return world.a(axisAlignedBB.a(blockPosition.shift(enumDirection)));
} catch (Exception e) { } catch (NoSuchMethodError e) {
// 1.11 // 1.11
return world.b(axisAlignedBB.a(blockPosition.shift(enumDirection))); return world.b(axisAlignedBB.a(blockPosition.shift(enumDirection)));
} }
@@ -156,7 +154,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block b) { public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block b) {
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
// Silent ender chest is pretty much API-only // Silent ender chest is pretty much API-only
if (silentchest && b.getType() == Material.ENDER_CHEST) { if (silentchest && b.getType() == Material.ENDER_CHEST) {

View File

@@ -23,7 +23,6 @@ import com.lishid.openinv.util.InternalAccessor;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_11_R1.IInventory; import net.minecraft.server.v1_11_R1.IInventory;
import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftInventory;

View File

@@ -25,14 +25,15 @@ import com.mojang.authlib.GameProfile;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_11_R1.EntityPlayer; import net.minecraft.server.v1_11_R1.EntityPlayer;
import net.minecraft.server.v1_11_R1.MinecraftServer; import net.minecraft.server.v1_11_R1.MinecraftServer;
import net.minecraft.server.v1_11_R1.PlayerInteractManager; import net.minecraft.server.v1_11_R1.PlayerInteractManager;
import org.bukkit.craftbukkit.v1_11_R1.CraftServer; import org.bukkit.craftbukkit.v1_11_R1.CraftServer;
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer;
public class PlayerDataManager implements IPlayerDataManager { public class PlayerDataManager implements IPlayerDataManager {
@@ -85,4 +86,24 @@ public class PlayerDataManager implements IPlayerDataManager {
return Bukkit.getOnlinePlayers(); return Bukkit.getOnlinePlayers();
} }
public static EntityPlayer getHandle(Player player) {
if (player instanceof CraftPlayer) {
return ((CraftPlayer) player).getHandle();
}
Server server = player.getServer();
EntityPlayer nmsPlayer = null;
if (server instanceof CraftServer) {
nmsPlayer = ((CraftServer) server).getHandle().getPlayer(player.getName());
}
if (nmsPlayer == null) {
// Could use reflection to examine fields, but it's honestly not worth the bother.
throw new RuntimeException("Unable to fetch EntityPlayer from provided Player implementation");
}
return nmsPlayer;
}
} }

View File

@@ -16,7 +16,6 @@
package com.lishid.openinv.internal.v1_11_R1; package com.lishid.openinv.internal.v1_11_R1;
// Volatile
import net.minecraft.server.v1_11_R1.ContainerChest; import net.minecraft.server.v1_11_R1.ContainerChest;
import net.minecraft.server.v1_11_R1.EntityHuman; import net.minecraft.server.v1_11_R1.EntityHuman;
import net.minecraft.server.v1_11_R1.IInventory; import net.minecraft.server.v1_11_R1.IInventory;

View File

@@ -25,13 +25,12 @@ import com.lishid.openinv.internal.ISpecialEnderChest;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile import net.minecraft.server.v1_11_R1.EntityPlayer;
import net.minecraft.server.v1_11_R1.IInventory; import net.minecraft.server.v1_11_R1.IInventory;
import net.minecraft.server.v1_11_R1.InventoryEnderChest; import net.minecraft.server.v1_11_R1.InventoryEnderChest;
import net.minecraft.server.v1_11_R1.InventorySubcontainer; import net.minecraft.server.v1_11_R1.InventorySubcontainer;
import net.minecraft.server.v1_11_R1.ItemStack; import net.minecraft.server.v1_11_R1.ItemStack;
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftInventory;
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest { public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
@@ -41,12 +40,12 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
private boolean playerOnline = false; private boolean playerOnline = false;
public SpecialEnderChest(Player player, Boolean online) { public SpecialEnderChest(Player player, Boolean online) {
super(((CraftPlayer) player).getHandle().getEnderChest().getName(), super(PlayerDataManager.getHandle(player).getEnderChest().getName(),
((CraftPlayer) player).getHandle().getEnderChest().hasCustomName(), PlayerDataManager.getHandle(player).getEnderChest().hasCustomName(),
((CraftPlayer) player).getHandle().getEnderChest().getSize()); PlayerDataManager.getHandle(player).getEnderChest().getSize());
CraftPlayer craftPlayer = (CraftPlayer) player; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
this.enderChest = craftPlayer.getHandle().getEnderChest(); this.enderChest = nmsPlayer.getEnderChest();
this.bukkitOwner = craftPlayer; this.bukkitOwner = nmsPlayer.getBukkitEntity();
setItemLists(this, enderChest.getContents()); setItemLists(this, enderChest.getContents());
} }
@@ -79,9 +78,9 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
this.bukkitOwner = player; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
CraftPlayer craftPlayer = (CraftPlayer) player; this.bukkitOwner = nmsPlayer.getBukkitEntity();
setItemLists(craftPlayer.getHandle().getEnderChest(), this.items); setItemLists(nmsPlayer.getEnderChest(), this.items);
} catch (Exception e) {} } catch (Exception e) {}
playerOnline = true; playerOnline = true;
} }

View File

@@ -26,13 +26,11 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import net.minecraft.server.v1_11_R1.ContainerUtil; import net.minecraft.server.v1_11_R1.ContainerUtil;
// Volatile
import net.minecraft.server.v1_11_R1.EntityHuman; import net.minecraft.server.v1_11_R1.EntityHuman;
import net.minecraft.server.v1_11_R1.ItemStack; import net.minecraft.server.v1_11_R1.ItemStack;
import net.minecraft.server.v1_11_R1.NonNullList; import net.minecraft.server.v1_11_R1.NonNullList;
import net.minecraft.server.v1_11_R1.PlayerInventory; import net.minecraft.server.v1_11_R1.PlayerInventory;
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftInventory;
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory { public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
@@ -41,7 +39,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
private boolean playerOnline = false; private boolean playerOnline = false;
public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) { public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) {
super(((CraftPlayer) bukkitPlayer).getHandle()); super(PlayerDataManager.getHandle(bukkitPlayer));
this.playerOnline = online; this.playerOnline = online;
setItemArrays(this, player.inventory.items, player.inventory.armor, player.inventory.extraSlots); setItemArrays(this, player.inventory.items, player.inventory.armor, player.inventory.extraSlots);
} }
@@ -91,7 +89,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override @Override
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
this.player = ((CraftPlayer) player).getHandle(); this.player = PlayerDataManager.getHandle(player);;
setItemArrays(this.player.inventory, items, armor, extraSlots); setItemArrays(this.player.inventory, items, armor, extraSlots);
playerOnline = true; playerOnline = true;
} }

View File

@@ -5,24 +5,24 @@
<parent> <parent>
<groupId>com.lishid</groupId> <groupId>com.lishid</groupId>
<artifactId>openinvinternal</artifactId> <artifactId>openinvinternal</artifactId>
<version>1.0-SNAPSHOT</version> <version>3.1.2</version>
</parent> </parent>
<artifactId>openinvadapter1_4_R1</artifactId> <artifactId>openinvadapter1_4_R1</artifactId>
<name>OpenInvAdapter1_4_R1</name> <name>OpenInvAdapter1_4_R1</name>
<dependencies> <dependencies>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>org.bukkit</groupId> <groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId> <artifactId>craftbukkit</artifactId>
<version>1.4.7-R1.0</version> <version>1.4.7-R1.0</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>3.1.2</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -22,7 +22,6 @@ import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_4_R1.AxisAlignedBB; import net.minecraft.server.v1_4_R1.AxisAlignedBB;
import net.minecraft.server.v1_4_R1.BlockEnderChest; import net.minecraft.server.v1_4_R1.BlockEnderChest;
import net.minecraft.server.v1_4_R1.Container; import net.minecraft.server.v1_4_R1.Container;
@@ -36,7 +35,6 @@ import net.minecraft.server.v1_4_R1.TileEntityChest;
import net.minecraft.server.v1_4_R1.TileEntityEnderChest; import net.minecraft.server.v1_4_R1.TileEntityEnderChest;
import net.minecraft.server.v1_4_R1.World; import net.minecraft.server.v1_4_R1.World;
import org.bukkit.craftbukkit.v1_4_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_4_R1.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_4_R1.event.CraftEventFactory;
public class AnySilentContainer implements IAnySilentContainer { public class AnySilentContainer implements IAnySilentContainer {
@@ -49,7 +47,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) { public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) {
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest // FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
World world = player.world; World world = player.world;
if (block instanceof BlockEnderChest) { if (block instanceof BlockEnderChest) {
@@ -97,7 +95,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) { public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) {
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
// Silent ender chest is API-only // Silent ender chest is API-only
if (silentchest && block.getType() == Material.ENDER_CHEST) { if (silentchest && block.getType() == Material.ENDER_CHEST) {

View File

@@ -23,7 +23,6 @@ import com.lishid.openinv.util.InternalAccessor;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_4_R1.IInventory; import net.minecraft.server.v1_4_R1.IInventory;
import org.bukkit.craftbukkit.v1_4_R1.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_4_R1.inventory.CraftInventory;

View File

@@ -23,14 +23,15 @@ import com.lishid.openinv.internal.IPlayerDataManager;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import net.minecraft.server.v1_4_R1.EntityPlayer; import net.minecraft.server.v1_4_R1.EntityPlayer;
import net.minecraft.server.v1_4_R1.MinecraftServer; import net.minecraft.server.v1_4_R1.MinecraftServer;
import net.minecraft.server.v1_4_R1.PlayerInteractManager; import net.minecraft.server.v1_4_R1.PlayerInteractManager;
// Volatile
import org.bukkit.craftbukkit.v1_4_R1.CraftServer; import org.bukkit.craftbukkit.v1_4_R1.CraftServer;
import org.bukkit.craftbukkit.v1_4_R1.entity.CraftPlayer;
public class PlayerDataManager implements IPlayerDataManager { public class PlayerDataManager implements IPlayerDataManager {
@@ -78,4 +79,24 @@ public class PlayerDataManager implements IPlayerDataManager {
return Arrays.asList(Bukkit.getOnlinePlayers()); return Arrays.asList(Bukkit.getOnlinePlayers());
} }
public static EntityPlayer getHandle(Player player) {
if (player instanceof CraftPlayer) {
return ((CraftPlayer) player).getHandle();
}
Server server = player.getServer();
EntityPlayer nmsPlayer = null;
if (server instanceof CraftServer) {
nmsPlayer = ((CraftServer) server).getHandle().f(player.getName());
}
if (nmsPlayer == null) {
// Could use reflection to examine fields, but it's honestly not worth the bother.
throw new RuntimeException("Unable to fetch EntityPlayer from provided Player implementation");
}
return nmsPlayer;
}
} }

View File

@@ -16,7 +16,6 @@
package com.lishid.openinv.internal.v1_4_R1; package com.lishid.openinv.internal.v1_4_R1;
// Volatile
import net.minecraft.server.v1_4_R1.ContainerChest; import net.minecraft.server.v1_4_R1.ContainerChest;
import net.minecraft.server.v1_4_R1.EntityHuman; import net.minecraft.server.v1_4_R1.EntityHuman;
import net.minecraft.server.v1_4_R1.IInventory; import net.minecraft.server.v1_4_R1.IInventory;

View File

@@ -27,7 +27,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
// Volatile import net.minecraft.server.v1_4_R1.EntityPlayer;
import net.minecraft.server.v1_4_R1.IInventory; import net.minecraft.server.v1_4_R1.IInventory;
import net.minecraft.server.v1_4_R1.InventoryEnderChest; import net.minecraft.server.v1_4_R1.InventoryEnderChest;
import net.minecraft.server.v1_4_R1.InventorySubcontainer; import net.minecraft.server.v1_4_R1.InventorySubcontainer;
@@ -46,12 +46,12 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
private CraftPlayer owner; private CraftPlayer owner;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
public SpecialEnderChest(Player p, Boolean online) { public SpecialEnderChest(Player player, Boolean online) {
super(((CraftPlayer) p).getHandle().getEnderChest().getName(), super(PlayerDataManager.getHandle(player).getEnderChest().getName(),
((CraftPlayer) p).getHandle().getEnderChest().getSize()); PlayerDataManager.getHandle(player).getEnderChest().getSize());
CraftPlayer player = (CraftPlayer) p; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
this.enderChest = player.getHandle().getEnderChest(); this.enderChest = nmsPlayer.getEnderChest();
this.owner = player; this.owner = nmsPlayer.getBukkitEntity();
this.items = enderChest.getContents(); this.items = enderChest.getContents();
} }
@@ -64,8 +64,9 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
owner = (CraftPlayer) player; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest(); this.owner = nmsPlayer.getBukkitEntity();
InventoryEnderChest playerEnderChest = nmsPlayer.getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);

View File

@@ -21,11 +21,9 @@ import com.lishid.openinv.internal.ISpecialPlayerInventory;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_4_R1.ItemStack; import net.minecraft.server.v1_4_R1.ItemStack;
import net.minecraft.server.v1_4_R1.PlayerInventory; import net.minecraft.server.v1_4_R1.PlayerInventory;
import org.bukkit.craftbukkit.v1_4_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_4_R1.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_4_R1.inventory.CraftInventory;
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory { public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
@@ -35,7 +33,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
private boolean playerOnline = false; private boolean playerOnline = false;
public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) { public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) {
super(((CraftPlayer) bukkitPlayer).getHandle()); super(PlayerDataManager.getHandle(bukkitPlayer));
this.playerOnline = online; this.playerOnline = online;
this.items = player.inventory.items; this.items = player.inventory.items;
this.armor = player.inventory.armor; this.armor = player.inventory.armor;
@@ -49,7 +47,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override @Override
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
this.player = ((CraftPlayer) player).getHandle(); this.player = PlayerDataManager.getHandle(player);
this.player.inventory.items = this.items; this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor; this.player.inventory.armor = this.armor;
playerOnline = true; playerOnline = true;

View File

@@ -5,24 +5,24 @@
<parent> <parent>
<groupId>com.lishid</groupId> <groupId>com.lishid</groupId>
<artifactId>openinvinternal</artifactId> <artifactId>openinvinternal</artifactId>
<version>1.0-SNAPSHOT</version> <version>3.1.2</version>
</parent> </parent>
<artifactId>openinvadapter1_5_R2</artifactId> <artifactId>openinvadapter1_5_R2</artifactId>
<name>OpenInvAdapter1_5_R2</name> <name>OpenInvAdapter1_5_R2</name>
<dependencies> <dependencies>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>org.bukkit</groupId> <groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId> <artifactId>craftbukkit</artifactId>
<version>1.5.1-R0.2</version> <version>1.5.1-R0.2</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>3.1.2</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -22,7 +22,6 @@ import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_5_R2.AxisAlignedBB; import net.minecraft.server.v1_5_R2.AxisAlignedBB;
import net.minecraft.server.v1_5_R2.BlockEnderChest; import net.minecraft.server.v1_5_R2.BlockEnderChest;
import net.minecraft.server.v1_5_R2.Container; import net.minecraft.server.v1_5_R2.Container;
@@ -36,7 +35,6 @@ import net.minecraft.server.v1_5_R2.TileEntityChest;
import net.minecraft.server.v1_5_R2.TileEntityEnderChest; import net.minecraft.server.v1_5_R2.TileEntityEnderChest;
import net.minecraft.server.v1_5_R2.World; import net.minecraft.server.v1_5_R2.World;
import org.bukkit.craftbukkit.v1_5_R2.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_5_R2.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_5_R2.event.CraftEventFactory;
public class AnySilentContainer implements IAnySilentContainer { public class AnySilentContainer implements IAnySilentContainer {
@@ -49,7 +47,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) { public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) {
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest // FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
World world = player.world; World world = player.world;
if (block instanceof BlockEnderChest) { if (block instanceof BlockEnderChest) {
@@ -97,7 +95,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) { public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) {
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
// Silent ender chest is API-only // Silent ender chest is API-only
if (silentchest && block.getType() == Material.ENDER_CHEST) { if (silentchest && block.getType() == Material.ENDER_CHEST) {

View File

@@ -23,7 +23,6 @@ import com.lishid.openinv.util.InternalAccessor;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_5_R2.IInventory; import net.minecraft.server.v1_5_R2.IInventory;
import org.bukkit.craftbukkit.v1_5_R2.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_5_R2.inventory.CraftInventory;

View File

@@ -23,14 +23,15 @@ import com.lishid.openinv.internal.IPlayerDataManager;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_5_R2.EntityPlayer; import net.minecraft.server.v1_5_R2.EntityPlayer;
import net.minecraft.server.v1_5_R2.MinecraftServer; import net.minecraft.server.v1_5_R2.MinecraftServer;
import net.minecraft.server.v1_5_R2.PlayerInteractManager; import net.minecraft.server.v1_5_R2.PlayerInteractManager;
import org.bukkit.craftbukkit.v1_5_R2.CraftServer; import org.bukkit.craftbukkit.v1_5_R2.CraftServer;
import org.bukkit.craftbukkit.v1_5_R2.entity.CraftPlayer;
public class PlayerDataManager implements IPlayerDataManager { public class PlayerDataManager implements IPlayerDataManager {
@@ -77,4 +78,24 @@ public class PlayerDataManager implements IPlayerDataManager {
return Arrays.asList(Bukkit.getOnlinePlayers()); return Arrays.asList(Bukkit.getOnlinePlayers());
} }
public static EntityPlayer getHandle(Player player) {
if (player instanceof CraftPlayer) {
return ((CraftPlayer) player).getHandle();
}
Server server = player.getServer();
EntityPlayer nmsPlayer = null;
if (server instanceof CraftServer) {
nmsPlayer = ((CraftServer) server).getHandle().f(player.getName());
}
if (nmsPlayer == null) {
// Could use reflection to examine fields, but it's honestly not worth the bother.
throw new RuntimeException("Unable to fetch EntityPlayer from provided Player implementation");
}
return nmsPlayer;
}
} }

View File

@@ -16,7 +16,6 @@
package com.lishid.openinv.internal.v1_5_R2; package com.lishid.openinv.internal.v1_5_R2;
// Volatile
import net.minecraft.server.v1_5_R2.ContainerChest; import net.minecraft.server.v1_5_R2.ContainerChest;
import net.minecraft.server.v1_5_R2.EntityHuman; import net.minecraft.server.v1_5_R2.EntityHuman;
import net.minecraft.server.v1_5_R2.IInventory; import net.minecraft.server.v1_5_R2.IInventory;

View File

@@ -27,7 +27,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
// Volatile import net.minecraft.server.v1_5_R2.EntityPlayer;
import net.minecraft.server.v1_5_R2.IInventory; import net.minecraft.server.v1_5_R2.IInventory;
import net.minecraft.server.v1_5_R2.InventoryEnderChest; import net.minecraft.server.v1_5_R2.InventoryEnderChest;
import net.minecraft.server.v1_5_R2.InventorySubcontainer; import net.minecraft.server.v1_5_R2.InventorySubcontainer;
@@ -46,13 +46,13 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
private CraftPlayer owner; private CraftPlayer owner;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
public SpecialEnderChest(Player p, Boolean online) { public SpecialEnderChest(Player player, Boolean online) {
super(((CraftPlayer) p).getHandle().getEnderChest().getName(), super(PlayerDataManager.getHandle(player).getEnderChest().getName(),
((CraftPlayer) p).getHandle().getEnderChest().c(), PlayerDataManager.getHandle(player).getEnderChest().c(),
((CraftPlayer) p).getHandle().getEnderChest().getSize()); PlayerDataManager.getHandle(player).getEnderChest().getSize());
CraftPlayer player = (CraftPlayer) p; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
this.enderChest = player.getHandle().getEnderChest(); this.enderChest = nmsPlayer.getEnderChest();
this.owner = player; this.owner = nmsPlayer.getBukkitEntity();
this.items = enderChest.getContents(); this.items = enderChest.getContents();
} }
@@ -65,8 +65,9 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
owner = (CraftPlayer) player; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest(); this.owner = nmsPlayer.getBukkitEntity();
InventoryEnderChest playerEnderChest = nmsPlayer.getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);

View File

@@ -21,11 +21,9 @@ import com.lishid.openinv.internal.ISpecialPlayerInventory;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_5_R2.ItemStack; import net.minecraft.server.v1_5_R2.ItemStack;
import net.minecraft.server.v1_5_R2.PlayerInventory; import net.minecraft.server.v1_5_R2.PlayerInventory;
import org.bukkit.craftbukkit.v1_5_R2.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_5_R2.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_5_R2.inventory.CraftInventory;
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory { public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
@@ -35,7 +33,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
private boolean playerOnline = false; private boolean playerOnline = false;
public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) { public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) {
super(((CraftPlayer) bukkitPlayer).getHandle()); super(PlayerDataManager.getHandle(bukkitPlayer));
this.playerOnline = online; this.playerOnline = online;
this.items = player.inventory.items; this.items = player.inventory.items;
this.armor = player.inventory.armor; this.armor = player.inventory.armor;
@@ -49,7 +47,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override @Override
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
this.player = ((CraftPlayer) player).getHandle(); this.player = PlayerDataManager.getHandle(player);
this.player.inventory.items = this.items; this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor; this.player.inventory.armor = this.armor;
playerOnline = true; playerOnline = true;

View File

@@ -5,24 +5,24 @@
<parent> <parent>
<groupId>com.lishid</groupId> <groupId>com.lishid</groupId>
<artifactId>openinvinternal</artifactId> <artifactId>openinvinternal</artifactId>
<version>1.0-SNAPSHOT</version> <version>3.1.2</version>
</parent> </parent>
<artifactId>openinvadapter1_5_R3</artifactId> <artifactId>openinvadapter1_5_R3</artifactId>
<name>OpenInvAdapter1_5_R3</name> <name>OpenInvAdapter1_5_R3</name>
<dependencies> <dependencies>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>org.bukkit</groupId> <groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId> <artifactId>craftbukkit</artifactId>
<version>1.5.2-R1.0</version> <version>1.5.2-R1.0</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>3.1.2</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -22,7 +22,6 @@ import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
//Volatile
import net.minecraft.server.v1_5_R3.AxisAlignedBB; import net.minecraft.server.v1_5_R3.AxisAlignedBB;
import net.minecraft.server.v1_5_R3.BlockEnderChest; import net.minecraft.server.v1_5_R3.BlockEnderChest;
import net.minecraft.server.v1_5_R3.Container; import net.minecraft.server.v1_5_R3.Container;
@@ -36,7 +35,6 @@ import net.minecraft.server.v1_5_R3.TileEntityChest;
import net.minecraft.server.v1_5_R3.TileEntityEnderChest; import net.minecraft.server.v1_5_R3.TileEntityEnderChest;
import net.minecraft.server.v1_5_R3.World; import net.minecraft.server.v1_5_R3.World;
import org.bukkit.craftbukkit.v1_5_R3.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_5_R3.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_5_R3.event.CraftEventFactory;
public class AnySilentContainer implements IAnySilentContainer { public class AnySilentContainer implements IAnySilentContainer {
@@ -49,7 +47,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) { public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) {
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest // FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
World world = player.world; World world = player.world;
if (block instanceof BlockEnderChest) { if (block instanceof BlockEnderChest) {
@@ -97,7 +95,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) { public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) {
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
// Silent ender chest is API-only // Silent ender chest is API-only
if (silentchest && block.getType() == Material.ENDER_CHEST) { if (silentchest && block.getType() == Material.ENDER_CHEST) {

View File

@@ -23,7 +23,6 @@ import com.lishid.openinv.util.InternalAccessor;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_5_R3.IInventory; import net.minecraft.server.v1_5_R3.IInventory;
import org.bukkit.craftbukkit.v1_5_R3.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_5_R3.inventory.CraftInventory;

View File

@@ -23,14 +23,15 @@ import com.lishid.openinv.internal.IPlayerDataManager;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_5_R3.EntityPlayer; import net.minecraft.server.v1_5_R3.EntityPlayer;
import net.minecraft.server.v1_5_R3.MinecraftServer; import net.minecraft.server.v1_5_R3.MinecraftServer;
import net.minecraft.server.v1_5_R3.PlayerInteractManager; import net.minecraft.server.v1_5_R3.PlayerInteractManager;
import org.bukkit.craftbukkit.v1_5_R3.CraftServer; import org.bukkit.craftbukkit.v1_5_R3.CraftServer;
import org.bukkit.craftbukkit.v1_5_R3.entity.CraftPlayer;
public class PlayerDataManager implements IPlayerDataManager { public class PlayerDataManager implements IPlayerDataManager {
@@ -77,4 +78,24 @@ public class PlayerDataManager implements IPlayerDataManager {
return Arrays.asList(Bukkit.getOnlinePlayers()); return Arrays.asList(Bukkit.getOnlinePlayers());
} }
public static EntityPlayer getHandle(Player player) {
if (player instanceof CraftPlayer) {
return ((CraftPlayer) player).getHandle();
}
Server server = player.getServer();
EntityPlayer nmsPlayer = null;
if (server instanceof CraftServer) {
nmsPlayer = ((CraftServer) server).getHandle().getPlayer(player.getName());
}
if (nmsPlayer == null) {
// Could use reflection to examine fields, but it's honestly not worth the bother.
throw new RuntimeException("Unable to fetch EntityPlayer from provided Player implementation");
}
return nmsPlayer;
}
} }

View File

@@ -16,7 +16,6 @@
package com.lishid.openinv.internal.v1_5_R3; package com.lishid.openinv.internal.v1_5_R3;
// Volatile
import net.minecraft.server.v1_5_R3.ContainerChest; import net.minecraft.server.v1_5_R3.ContainerChest;
import net.minecraft.server.v1_5_R3.EntityHuman; import net.minecraft.server.v1_5_R3.EntityHuman;
import net.minecraft.server.v1_5_R3.IInventory; import net.minecraft.server.v1_5_R3.IInventory;

View File

@@ -27,7 +27,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
// Volatile import net.minecraft.server.v1_5_R3.EntityPlayer;
import net.minecraft.server.v1_5_R3.IInventory; import net.minecraft.server.v1_5_R3.IInventory;
import net.minecraft.server.v1_5_R3.InventoryEnderChest; import net.minecraft.server.v1_5_R3.InventoryEnderChest;
import net.minecraft.server.v1_5_R3.InventorySubcontainer; import net.minecraft.server.v1_5_R3.InventorySubcontainer;
@@ -46,13 +46,13 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
private CraftPlayer owner; private CraftPlayer owner;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
public SpecialEnderChest(Player p, Boolean online) { public SpecialEnderChest(Player player, Boolean online) {
super(((CraftPlayer) p).getHandle().getEnderChest().getName(), super(PlayerDataManager.getHandle(player).getEnderChest().getName(),
((CraftPlayer) p).getHandle().getEnderChest().c(), PlayerDataManager.getHandle(player).getEnderChest().c(),
((CraftPlayer) p).getHandle().getEnderChest().getSize()); PlayerDataManager.getHandle(player).getEnderChest().getSize());
CraftPlayer player = (CraftPlayer) p; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
this.enderChest = player.getHandle().getEnderChest(); this.enderChest = nmsPlayer.getEnderChest();
this.owner = player; this.owner = nmsPlayer.getBukkitEntity();
this.items = enderChest.getContents(); this.items = enderChest.getContents();
} }
@@ -65,8 +65,9 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
owner = (CraftPlayer) player; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest(); this.owner = nmsPlayer.getBukkitEntity();
InventoryEnderChest playerEnderChest = nmsPlayer.getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);

View File

@@ -21,11 +21,9 @@ import com.lishid.openinv.internal.ISpecialPlayerInventory;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_5_R3.ItemStack; import net.minecraft.server.v1_5_R3.ItemStack;
import net.minecraft.server.v1_5_R3.PlayerInventory; import net.minecraft.server.v1_5_R3.PlayerInventory;
import org.bukkit.craftbukkit.v1_5_R3.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_5_R3.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_5_R3.inventory.CraftInventory;
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory { public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
@@ -35,7 +33,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
private boolean playerOnline = false; private boolean playerOnline = false;
public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) { public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) {
super(((CraftPlayer) bukkitPlayer).getHandle()); super(PlayerDataManager.getHandle(bukkitPlayer));
this.playerOnline = online; this.playerOnline = online;
this.items = player.inventory.items; this.items = player.inventory.items;
this.armor = player.inventory.armor; this.armor = player.inventory.armor;
@@ -49,7 +47,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override @Override
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
this.player = ((CraftPlayer) player).getHandle(); this.player = PlayerDataManager.getHandle(player);
this.player.inventory.items = this.items; this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor; this.player.inventory.armor = this.armor;
playerOnline = true; playerOnline = true;

View File

@@ -5,24 +5,24 @@
<parent> <parent>
<groupId>com.lishid</groupId> <groupId>com.lishid</groupId>
<artifactId>openinvinternal</artifactId> <artifactId>openinvinternal</artifactId>
<version>1.0-SNAPSHOT</version> <version>3.1.2</version>
</parent> </parent>
<artifactId>openinvadapter1_6_R1</artifactId> <artifactId>openinvadapter1_6_R1</artifactId>
<name>OpenInvAdapter1_6_R1</name> <name>OpenInvAdapter1_6_R1</name>
<dependencies> <dependencies>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>org.bukkit</groupId> <groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId> <artifactId>craftbukkit</artifactId>
<version>1.6.1-R0.1-SNAPSHOT</version> <version>1.6.1-R0.1-SNAPSHOT</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>3.1.2</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -22,7 +22,6 @@ import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_6_R1.AxisAlignedBB; import net.minecraft.server.v1_6_R1.AxisAlignedBB;
import net.minecraft.server.v1_6_R1.BlockEnderChest; import net.minecraft.server.v1_6_R1.BlockEnderChest;
import net.minecraft.server.v1_6_R1.Container; import net.minecraft.server.v1_6_R1.Container;
@@ -36,7 +35,6 @@ import net.minecraft.server.v1_6_R1.TileEntityChest;
import net.minecraft.server.v1_6_R1.TileEntityEnderChest; import net.minecraft.server.v1_6_R1.TileEntityEnderChest;
import net.minecraft.server.v1_6_R1.World; import net.minecraft.server.v1_6_R1.World;
import org.bukkit.craftbukkit.v1_6_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_6_R1.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_6_R1.event.CraftEventFactory;
public class AnySilentContainer implements IAnySilentContainer { public class AnySilentContainer implements IAnySilentContainer {
@@ -49,7 +47,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) { public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) {
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest // FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
World world = player.world; World world = player.world;
if (block instanceof BlockEnderChest) { if (block instanceof BlockEnderChest) {
@@ -97,7 +95,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) { public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) {
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
// Silent ender chest is API-only // Silent ender chest is API-only
if (silentchest && block.getType() == Material.ENDER_CHEST) { if (silentchest && block.getType() == Material.ENDER_CHEST) {

View File

@@ -23,7 +23,6 @@ import com.lishid.openinv.util.InternalAccessor;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_6_R1.IInventory; import net.minecraft.server.v1_6_R1.IInventory;
import org.bukkit.craftbukkit.v1_6_R1.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_6_R1.inventory.CraftInventory;

View File

@@ -23,14 +23,15 @@ import com.lishid.openinv.internal.IPlayerDataManager;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_6_R1.EntityPlayer; import net.minecraft.server.v1_6_R1.EntityPlayer;
import net.minecraft.server.v1_6_R1.MinecraftServer; import net.minecraft.server.v1_6_R1.MinecraftServer;
import net.minecraft.server.v1_6_R1.PlayerInteractManager; import net.minecraft.server.v1_6_R1.PlayerInteractManager;
import org.bukkit.craftbukkit.v1_6_R1.CraftServer; import org.bukkit.craftbukkit.v1_6_R1.CraftServer;
import org.bukkit.craftbukkit.v1_6_R1.entity.CraftPlayer;
public class PlayerDataManager implements IPlayerDataManager { public class PlayerDataManager implements IPlayerDataManager {
@@ -77,4 +78,24 @@ public class PlayerDataManager implements IPlayerDataManager {
return Arrays.asList(Bukkit.getOnlinePlayers()); return Arrays.asList(Bukkit.getOnlinePlayers());
} }
public static EntityPlayer getHandle(Player player) {
if (player instanceof CraftPlayer) {
return ((CraftPlayer) player).getHandle();
}
Server server = player.getServer();
EntityPlayer nmsPlayer = null;
if (server instanceof CraftServer) {
nmsPlayer = ((CraftServer) server).getHandle().getPlayer(player.getName());
}
if (nmsPlayer == null) {
// Could use reflection to examine fields, but it's honestly not worth the bother.
throw new RuntimeException("Unable to fetch EntityPlayer from provided Player implementation");
}
return nmsPlayer;
}
} }

View File

@@ -16,7 +16,6 @@
package com.lishid.openinv.internal.v1_6_R1; package com.lishid.openinv.internal.v1_6_R1;
// Volatile
import net.minecraft.server.v1_6_R1.ContainerChest; import net.minecraft.server.v1_6_R1.ContainerChest;
import net.minecraft.server.v1_6_R1.EntityHuman; import net.minecraft.server.v1_6_R1.EntityHuman;
import net.minecraft.server.v1_6_R1.IInventory; import net.minecraft.server.v1_6_R1.IInventory;

View File

@@ -27,7 +27,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
// Volatile import net.minecraft.server.v1_6_R1.EntityPlayer;
import net.minecraft.server.v1_6_R1.IInventory; import net.minecraft.server.v1_6_R1.IInventory;
import net.minecraft.server.v1_6_R1.InventoryEnderChest; import net.minecraft.server.v1_6_R1.InventoryEnderChest;
import net.minecraft.server.v1_6_R1.InventorySubcontainer; import net.minecraft.server.v1_6_R1.InventorySubcontainer;
@@ -46,13 +46,13 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
private CraftPlayer owner; private CraftPlayer owner;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
public SpecialEnderChest(Player p, Boolean online) { public SpecialEnderChest(Player player, Boolean online) {
super(((CraftPlayer) p).getHandle().getEnderChest().getName(), super(PlayerDataManager.getHandle(player).getEnderChest().getName(),
((CraftPlayer) p).getHandle().getEnderChest().c(), PlayerDataManager.getHandle(player).getEnderChest().c(),
((CraftPlayer) p).getHandle().getEnderChest().getSize()); PlayerDataManager.getHandle(player).getEnderChest().getSize());
CraftPlayer player = (CraftPlayer) p; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
this.enderChest = player.getHandle().getEnderChest(); this.enderChest = nmsPlayer.getEnderChest();
this.owner = player; this.owner = nmsPlayer.getBukkitEntity();
this.items = enderChest.getContents(); this.items = enderChest.getContents();
} }
@@ -65,8 +65,9 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
owner = (CraftPlayer) player; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest(); this.owner = nmsPlayer.getBukkitEntity();
InventoryEnderChest playerEnderChest = nmsPlayer.getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);

View File

@@ -21,11 +21,9 @@ import com.lishid.openinv.internal.ISpecialPlayerInventory;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_6_R1.ItemStack; import net.minecraft.server.v1_6_R1.ItemStack;
import net.minecraft.server.v1_6_R1.PlayerInventory; import net.minecraft.server.v1_6_R1.PlayerInventory;
import org.bukkit.craftbukkit.v1_6_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_6_R1.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_6_R1.inventory.CraftInventory;
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory { public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
@@ -35,7 +33,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
private boolean playerOnline = false; private boolean playerOnline = false;
public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) { public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) {
super(((CraftPlayer) bukkitPlayer).getHandle()); super(PlayerDataManager.getHandle(bukkitPlayer));
this.playerOnline = online; this.playerOnline = online;
this.items = player.inventory.items; this.items = player.inventory.items;
this.armor = player.inventory.armor; this.armor = player.inventory.armor;
@@ -49,7 +47,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override @Override
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
this.player = ((CraftPlayer) player).getHandle(); this.player = PlayerDataManager.getHandle(player);
this.player.inventory.items = this.items; this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor; this.player.inventory.armor = this.armor;
playerOnline = true; playerOnline = true;

View File

@@ -5,24 +5,24 @@
<parent> <parent>
<groupId>com.lishid</groupId> <groupId>com.lishid</groupId>
<artifactId>openinvinternal</artifactId> <artifactId>openinvinternal</artifactId>
<version>1.0-SNAPSHOT</version> <version>3.1.2</version>
</parent> </parent>
<artifactId>openinvadapter1_6_R2</artifactId> <artifactId>openinvadapter1_6_R2</artifactId>
<name>OpenInvAdapter1_6_R2</name> <name>OpenInvAdapter1_6_R2</name>
<dependencies> <dependencies>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>org.bukkit</groupId> <groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId> <artifactId>craftbukkit</artifactId>
<version>1.6.2-R1.0</version> <version>1.6.2-R1.0</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>3.1.2</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -22,7 +22,6 @@ import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_6_R2.AxisAlignedBB; import net.minecraft.server.v1_6_R2.AxisAlignedBB;
import net.minecraft.server.v1_6_R2.BlockEnderChest; import net.minecraft.server.v1_6_R2.BlockEnderChest;
import net.minecraft.server.v1_6_R2.Container; import net.minecraft.server.v1_6_R2.Container;
@@ -36,7 +35,6 @@ import net.minecraft.server.v1_6_R2.TileEntityChest;
import net.minecraft.server.v1_6_R2.TileEntityEnderChest; import net.minecraft.server.v1_6_R2.TileEntityEnderChest;
import net.minecraft.server.v1_6_R2.World; import net.minecraft.server.v1_6_R2.World;
import org.bukkit.craftbukkit.v1_6_R2.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_6_R2.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_6_R2.event.CraftEventFactory;
public class AnySilentContainer implements IAnySilentContainer { public class AnySilentContainer implements IAnySilentContainer {
@@ -49,7 +47,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) { public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) {
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest // FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
World world = player.world; World world = player.world;
if (block instanceof BlockEnderChest) { if (block instanceof BlockEnderChest) {
@@ -97,7 +95,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) { public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) {
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
// Silent ender chest is API-only // Silent ender chest is API-only
if (silentchest && block.getType() == Material.ENDER_CHEST) { if (silentchest && block.getType() == Material.ENDER_CHEST) {

View File

@@ -23,7 +23,6 @@ import com.lishid.openinv.util.InternalAccessor;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_6_R2.IInventory; import net.minecraft.server.v1_6_R2.IInventory;
import org.bukkit.craftbukkit.v1_6_R2.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_6_R2.inventory.CraftInventory;

View File

@@ -23,14 +23,15 @@ import com.lishid.openinv.internal.IPlayerDataManager;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_6_R2.EntityPlayer; import net.minecraft.server.v1_6_R2.EntityPlayer;
import net.minecraft.server.v1_6_R2.MinecraftServer; import net.minecraft.server.v1_6_R2.MinecraftServer;
import net.minecraft.server.v1_6_R2.PlayerInteractManager; import net.minecraft.server.v1_6_R2.PlayerInteractManager;
import org.bukkit.craftbukkit.v1_6_R2.CraftServer; import org.bukkit.craftbukkit.v1_6_R2.CraftServer;
import org.bukkit.craftbukkit.v1_6_R2.entity.CraftPlayer;
public class PlayerDataManager implements IPlayerDataManager { public class PlayerDataManager implements IPlayerDataManager {
@@ -77,4 +78,24 @@ public class PlayerDataManager implements IPlayerDataManager {
return Arrays.asList(Bukkit.getOnlinePlayers()); return Arrays.asList(Bukkit.getOnlinePlayers());
} }
public static EntityPlayer getHandle(Player player) {
if (player instanceof CraftPlayer) {
return ((CraftPlayer) player).getHandle();
}
Server server = player.getServer();
EntityPlayer nmsPlayer = null;
if (server instanceof CraftServer) {
nmsPlayer = ((CraftServer) server).getHandle().getPlayer(player.getName());
}
if (nmsPlayer == null) {
// Could use reflection to examine fields, but it's honestly not worth the bother.
throw new RuntimeException("Unable to fetch EntityPlayer from provided Player implementation");
}
return nmsPlayer;
}
} }

View File

@@ -16,7 +16,6 @@
package com.lishid.openinv.internal.v1_6_R2; package com.lishid.openinv.internal.v1_6_R2;
// Volatile
import net.minecraft.server.v1_6_R2.ContainerChest; import net.minecraft.server.v1_6_R2.ContainerChest;
import net.minecraft.server.v1_6_R2.EntityHuman; import net.minecraft.server.v1_6_R2.EntityHuman;
import net.minecraft.server.v1_6_R2.IInventory; import net.minecraft.server.v1_6_R2.IInventory;

View File

@@ -27,7 +27,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
// Volatile import net.minecraft.server.v1_6_R2.EntityPlayer;
import net.minecraft.server.v1_6_R2.IInventory; import net.minecraft.server.v1_6_R2.IInventory;
import net.minecraft.server.v1_6_R2.InventoryEnderChest; import net.minecraft.server.v1_6_R2.InventoryEnderChest;
import net.minecraft.server.v1_6_R2.InventorySubcontainer; import net.minecraft.server.v1_6_R2.InventorySubcontainer;
@@ -46,13 +46,13 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
private CraftPlayer owner; private CraftPlayer owner;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
public SpecialEnderChest(Player p, Boolean online) { public SpecialEnderChest(Player player, Boolean online) {
super(((CraftPlayer) p).getHandle().getEnderChest().getName(), super(PlayerDataManager.getHandle(player).getEnderChest().getName(),
((CraftPlayer) p).getHandle().getEnderChest().c(), PlayerDataManager.getHandle(player).getEnderChest().c(),
((CraftPlayer) p).getHandle().getEnderChest().getSize()); PlayerDataManager.getHandle(player).getEnderChest().getSize());
CraftPlayer player = (CraftPlayer) p; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
this.enderChest = player.getHandle().getEnderChest(); this.enderChest = nmsPlayer.getEnderChest();
this.owner = player; this.owner = nmsPlayer.getBukkitEntity();
this.items = enderChest.getContents(); this.items = enderChest.getContents();
} }
@@ -65,8 +65,9 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
owner = (CraftPlayer) player; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest(); this.owner = nmsPlayer.getBukkitEntity();
InventoryEnderChest playerEnderChest = nmsPlayer.getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);

View File

@@ -21,11 +21,9 @@ import com.lishid.openinv.internal.ISpecialPlayerInventory;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_6_R2.ItemStack; import net.minecraft.server.v1_6_R2.ItemStack;
import net.minecraft.server.v1_6_R2.PlayerInventory; import net.minecraft.server.v1_6_R2.PlayerInventory;
import org.bukkit.craftbukkit.v1_6_R2.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_6_R2.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_6_R2.inventory.CraftInventory;
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory { public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
@@ -35,7 +33,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
private boolean playerOnline = false; private boolean playerOnline = false;
public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) { public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) {
super(((CraftPlayer) bukkitPlayer).getHandle()); super(PlayerDataManager.getHandle(bukkitPlayer));
this.playerOnline = online; this.playerOnline = online;
this.items = player.inventory.items; this.items = player.inventory.items;
this.armor = player.inventory.armor; this.armor = player.inventory.armor;
@@ -49,7 +47,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override @Override
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
this.player = ((CraftPlayer) player).getHandle(); this.player = PlayerDataManager.getHandle(player);
this.player.inventory.items = this.items; this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor; this.player.inventory.armor = this.armor;
playerOnline = true; playerOnline = true;

View File

@@ -5,24 +5,24 @@
<parent> <parent>
<groupId>com.lishid</groupId> <groupId>com.lishid</groupId>
<artifactId>openinvinternal</artifactId> <artifactId>openinvinternal</artifactId>
<version>1.0-SNAPSHOT</version> <version>3.1.2</version>
</parent> </parent>
<artifactId>openinvadapter1_6_R3</artifactId> <artifactId>openinvadapter1_6_R3</artifactId>
<name>OpenInvAdapter1_6_R3</name> <name>OpenInvAdapter1_6_R3</name>
<dependencies> <dependencies>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>org.bukkit</groupId> <groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId> <artifactId>craftbukkit</artifactId>
<version>1.6.4-R2.0</version> <version>1.6.4-R2.0</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>3.1.2</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -22,7 +22,6 @@ import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_6_R3.AxisAlignedBB; import net.minecraft.server.v1_6_R3.AxisAlignedBB;
import net.minecraft.server.v1_6_R3.BlockEnderChest; import net.minecraft.server.v1_6_R3.BlockEnderChest;
import net.minecraft.server.v1_6_R3.Container; import net.minecraft.server.v1_6_R3.Container;
@@ -36,7 +35,6 @@ import net.minecraft.server.v1_6_R3.TileEntityChest;
import net.minecraft.server.v1_6_R3.TileEntityEnderChest; import net.minecraft.server.v1_6_R3.TileEntityEnderChest;
import net.minecraft.server.v1_6_R3.World; import net.minecraft.server.v1_6_R3.World;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_6_R3.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_6_R3.event.CraftEventFactory;
public class AnySilentContainer implements IAnySilentContainer { public class AnySilentContainer implements IAnySilentContainer {
@@ -49,7 +47,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) { public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) {
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest // FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
World world = player.world; World world = player.world;
if (block instanceof BlockEnderChest) { if (block instanceof BlockEnderChest) {
@@ -97,7 +95,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) { public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) {
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
// Silent ender chest is API-only // Silent ender chest is API-only
if (silentchest && block.getType() == Material.ENDER_CHEST) { if (silentchest && block.getType() == Material.ENDER_CHEST) {

View File

@@ -23,7 +23,6 @@ import com.lishid.openinv.util.InternalAccessor;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_6_R3.IInventory; import net.minecraft.server.v1_6_R3.IInventory;
import org.bukkit.craftbukkit.v1_6_R3.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_6_R3.inventory.CraftInventory;

View File

@@ -23,14 +23,15 @@ import com.lishid.openinv.internal.IPlayerDataManager;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_6_R3.EntityPlayer; import net.minecraft.server.v1_6_R3.EntityPlayer;
import net.minecraft.server.v1_6_R3.MinecraftServer; import net.minecraft.server.v1_6_R3.MinecraftServer;
import net.minecraft.server.v1_6_R3.PlayerInteractManager; import net.minecraft.server.v1_6_R3.PlayerInteractManager;
import org.bukkit.craftbukkit.v1_6_R3.CraftServer; import org.bukkit.craftbukkit.v1_6_R3.CraftServer;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer;
public class PlayerDataManager implements IPlayerDataManager { public class PlayerDataManager implements IPlayerDataManager {
@@ -77,4 +78,24 @@ public class PlayerDataManager implements IPlayerDataManager {
return Arrays.asList(Bukkit.getOnlinePlayers()); return Arrays.asList(Bukkit.getOnlinePlayers());
} }
public static EntityPlayer getHandle(Player player) {
if (player instanceof CraftPlayer) {
return ((CraftPlayer) player).getHandle();
}
Server server = player.getServer();
EntityPlayer nmsPlayer = null;
if (server instanceof CraftServer) {
nmsPlayer = ((CraftServer) server).getHandle().getPlayer(player.getName());
}
if (nmsPlayer == null) {
// Could use reflection to examine fields, but it's honestly not worth the bother.
throw new RuntimeException("Unable to fetch EntityPlayer from provided Player implementation");
}
return nmsPlayer;
}
} }

View File

@@ -16,7 +16,6 @@
package com.lishid.openinv.internal.v1_6_R3; package com.lishid.openinv.internal.v1_6_R3;
// Volatile
import net.minecraft.server.v1_6_R3.ContainerChest; import net.minecraft.server.v1_6_R3.ContainerChest;
import net.minecraft.server.v1_6_R3.EntityHuman; import net.minecraft.server.v1_6_R3.EntityHuman;
import net.minecraft.server.v1_6_R3.IInventory; import net.minecraft.server.v1_6_R3.IInventory;

View File

@@ -27,7 +27,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
// Volatile import net.minecraft.server.v1_6_R3.EntityPlayer;
import net.minecraft.server.v1_6_R3.IInventory; import net.minecraft.server.v1_6_R3.IInventory;
import net.minecraft.server.v1_6_R3.InventoryEnderChest; import net.minecraft.server.v1_6_R3.InventoryEnderChest;
import net.minecraft.server.v1_6_R3.InventorySubcontainer; import net.minecraft.server.v1_6_R3.InventorySubcontainer;
@@ -46,13 +46,13 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
private CraftPlayer owner; private CraftPlayer owner;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
public SpecialEnderChest(Player p, Boolean online) { public SpecialEnderChest(Player player, Boolean online) {
super(((CraftPlayer) p).getHandle().getEnderChest().getName(), super(PlayerDataManager.getHandle(player).getEnderChest().getName(),
((CraftPlayer) p).getHandle().getEnderChest().c(), PlayerDataManager.getHandle(player).getEnderChest().c(),
((CraftPlayer) p).getHandle().getEnderChest().getSize()); PlayerDataManager.getHandle(player).getEnderChest().getSize());
CraftPlayer player = (CraftPlayer) p; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
this.enderChest = player.getHandle().getEnderChest(); this.enderChest = nmsPlayer.getEnderChest();
this.owner = player; this.owner = nmsPlayer.getBukkitEntity();
this.items = enderChest.getContents(); this.items = enderChest.getContents();
} }
@@ -65,8 +65,9 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
owner = (CraftPlayer) player; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest(); this.owner = nmsPlayer.getBukkitEntity();
InventoryEnderChest playerEnderChest = nmsPlayer.getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);

View File

@@ -21,11 +21,9 @@ import com.lishid.openinv.internal.ISpecialPlayerInventory;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_6_R3.ItemStack; import net.minecraft.server.v1_6_R3.ItemStack;
import net.minecraft.server.v1_6_R3.PlayerInventory; import net.minecraft.server.v1_6_R3.PlayerInventory;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_6_R3.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_6_R3.inventory.CraftInventory;
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory { public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
@@ -35,7 +33,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
private boolean playerOnline = false; private boolean playerOnline = false;
public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) { public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) {
super(((CraftPlayer) bukkitPlayer).getHandle()); super(PlayerDataManager.getHandle(bukkitPlayer));
this.playerOnline = online; this.playerOnline = online;
this.items = player.inventory.items; this.items = player.inventory.items;
this.armor = player.inventory.armor; this.armor = player.inventory.armor;
@@ -49,7 +47,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override @Override
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
this.player = ((CraftPlayer) player).getHandle(); this.player = PlayerDataManager.getHandle(player);
this.player.inventory.items = this.items; this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor; this.player.inventory.armor = this.armor;
playerOnline = true; playerOnline = true;

View File

@@ -5,24 +5,24 @@
<parent> <parent>
<groupId>com.lishid</groupId> <groupId>com.lishid</groupId>
<artifactId>openinvinternal</artifactId> <artifactId>openinvinternal</artifactId>
<version>1.0-SNAPSHOT</version> <version>3.1.2</version>
</parent> </parent>
<artifactId>openinvadapter1_7_R1</artifactId> <artifactId>openinvadapter1_7_R1</artifactId>
<name>OpenInvAdapter1_7_R1</name> <name>OpenInvAdapter1_7_R1</name>
<dependencies> <dependencies>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>org.bukkit</groupId> <groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId> <artifactId>craftbukkit</artifactId>
<version>1.7.2-R0.4</version> <version>1.7.2-R0.4</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>3.1.2</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -22,7 +22,6 @@ import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
//Volatile
import net.minecraft.server.v1_7_R1.AxisAlignedBB; import net.minecraft.server.v1_7_R1.AxisAlignedBB;
import net.minecraft.server.v1_7_R1.Block; import net.minecraft.server.v1_7_R1.Block;
import net.minecraft.server.v1_7_R1.BlockEnderChest; import net.minecraft.server.v1_7_R1.BlockEnderChest;
@@ -37,7 +36,6 @@ import net.minecraft.server.v1_7_R1.TileEntityChest;
import net.minecraft.server.v1_7_R1.TileEntityEnderChest; import net.minecraft.server.v1_7_R1.TileEntityEnderChest;
import net.minecraft.server.v1_7_R1.World; import net.minecraft.server.v1_7_R1.World;
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_7_R1.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_7_R1.event.CraftEventFactory;
public class AnySilentContainer implements IAnySilentContainer { public class AnySilentContainer implements IAnySilentContainer {
@@ -50,7 +48,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) { public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) {
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest // FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
World world = player.world; World world = player.world;
if (block instanceof BlockEnderChest) { if (block instanceof BlockEnderChest) {
@@ -98,7 +96,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) { public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) {
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
// Silent ender chest is API-only // Silent ender chest is API-only
if (silentchest && block.getType() == Material.ENDER_CHEST) { if (silentchest && block.getType() == Material.ENDER_CHEST) {

View File

@@ -23,7 +23,6 @@ import com.lishid.openinv.util.InternalAccessor;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_7_R1.IInventory; import net.minecraft.server.v1_7_R1.IInventory;
import org.bukkit.craftbukkit.v1_7_R1.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_7_R1.inventory.CraftInventory;

View File

@@ -23,15 +23,16 @@ import com.lishid.openinv.internal.IPlayerDataManager;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_7_R1.EntityPlayer; import net.minecraft.server.v1_7_R1.EntityPlayer;
import net.minecraft.server.v1_7_R1.MinecraftServer; import net.minecraft.server.v1_7_R1.MinecraftServer;
import net.minecraft.server.v1_7_R1.PlayerInteractManager; import net.minecraft.server.v1_7_R1.PlayerInteractManager;
import net.minecraft.util.com.mojang.authlib.GameProfile; import net.minecraft.util.com.mojang.authlib.GameProfile;
import org.bukkit.craftbukkit.v1_7_R1.CraftServer; import org.bukkit.craftbukkit.v1_7_R1.CraftServer;
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftPlayer;
public class PlayerDataManager implements IPlayerDataManager { public class PlayerDataManager implements IPlayerDataManager {
@@ -78,4 +79,24 @@ public class PlayerDataManager implements IPlayerDataManager {
return Arrays.asList(Bukkit.getOnlinePlayers()); return Arrays.asList(Bukkit.getOnlinePlayers());
} }
public static EntityPlayer getHandle(Player player) {
if (player instanceof CraftPlayer) {
return ((CraftPlayer) player).getHandle();
}
Server server = player.getServer();
EntityPlayer nmsPlayer = null;
if (server instanceof CraftServer) {
nmsPlayer = ((CraftServer) server).getHandle().getPlayer(player.getName());
}
if (nmsPlayer == null) {
// Could use reflection to examine fields, but it's honestly not worth the bother.
throw new RuntimeException("Unable to fetch EntityPlayer from provided Player implementation");
}
return nmsPlayer;
}
} }

View File

@@ -16,7 +16,6 @@
package com.lishid.openinv.internal.v1_7_R1; package com.lishid.openinv.internal.v1_7_R1;
// Volatile
import net.minecraft.server.v1_7_R1.ContainerChest; import net.minecraft.server.v1_7_R1.ContainerChest;
import net.minecraft.server.v1_7_R1.EntityHuman; import net.minecraft.server.v1_7_R1.EntityHuman;
import net.minecraft.server.v1_7_R1.IInventory; import net.minecraft.server.v1_7_R1.IInventory;

View File

@@ -27,7 +27,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
// Volatile import net.minecraft.server.v1_7_R1.EntityPlayer;
import net.minecraft.server.v1_7_R1.IInventory; import net.minecraft.server.v1_7_R1.IInventory;
import net.minecraft.server.v1_7_R1.InventoryEnderChest; import net.minecraft.server.v1_7_R1.InventoryEnderChest;
import net.minecraft.server.v1_7_R1.InventorySubcontainer; import net.minecraft.server.v1_7_R1.InventorySubcontainer;
@@ -46,13 +46,13 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
private CraftPlayer owner; private CraftPlayer owner;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
public SpecialEnderChest(Player p, Boolean online) { public SpecialEnderChest(Player player, Boolean online) {
super(((CraftPlayer) p).getHandle().getEnderChest().getInventoryName(), super(PlayerDataManager.getHandle(player).getEnderChest().getInventoryName(),
((CraftPlayer) p).getHandle().getEnderChest().k_(), PlayerDataManager.getHandle(player).getEnderChest().k_(),
((CraftPlayer) p).getHandle().getEnderChest().getSize()); PlayerDataManager.getHandle(player).getEnderChest().getSize());
CraftPlayer player = (CraftPlayer) p; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
this.enderChest = player.getHandle().getEnderChest(); this.enderChest = nmsPlayer.getEnderChest();
this.owner = player; this.owner = nmsPlayer.getBukkitEntity();
this.items = enderChest.getContents(); this.items = enderChest.getContents();
} }
@@ -65,8 +65,9 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
owner = (CraftPlayer) player; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest(); this.owner = nmsPlayer.getBukkitEntity();
InventoryEnderChest playerEnderChest = nmsPlayer.getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);

View File

@@ -21,11 +21,9 @@ import com.lishid.openinv.internal.ISpecialPlayerInventory;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_7_R1.ItemStack; import net.minecraft.server.v1_7_R1.ItemStack;
import net.minecraft.server.v1_7_R1.PlayerInventory; import net.minecraft.server.v1_7_R1.PlayerInventory;
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_7_R1.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_7_R1.inventory.CraftInventory;
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory { public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
@@ -35,7 +33,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
private boolean playerOnline = false; private boolean playerOnline = false;
public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) { public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) {
super(((CraftPlayer) bukkitPlayer).getHandle()); super(PlayerDataManager.getHandle(bukkitPlayer));
this.playerOnline = online; this.playerOnline = online;
this.items = player.inventory.items; this.items = player.inventory.items;
this.armor = player.inventory.armor; this.armor = player.inventory.armor;
@@ -49,7 +47,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override @Override
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
this.player = ((CraftPlayer) player).getHandle(); this.player = PlayerDataManager.getHandle(player);
this.player.inventory.items = this.items; this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor; this.player.inventory.armor = this.armor;
playerOnline = true; playerOnline = true;

View File

@@ -5,24 +5,24 @@
<parent> <parent>
<groupId>com.lishid</groupId> <groupId>com.lishid</groupId>
<artifactId>openinvinternal</artifactId> <artifactId>openinvinternal</artifactId>
<version>1.0-SNAPSHOT</version> <version>3.1.2</version>
</parent> </parent>
<artifactId>openinvadapter1_7_R2</artifactId> <artifactId>openinvadapter1_7_R2</artifactId>
<name>OpenInvAdapter1_7_R2</name> <name>OpenInvAdapter1_7_R2</name>
<dependencies> <dependencies>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>org.bukkit</groupId> <groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId> <artifactId>craftbukkit</artifactId>
<version>1.7.5-R0.1</version> <version>1.7.5-R0.1</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>3.1.2</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -22,7 +22,6 @@ import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
//Volatile
import net.minecraft.server.v1_7_R2.AxisAlignedBB; import net.minecraft.server.v1_7_R2.AxisAlignedBB;
import net.minecraft.server.v1_7_R2.Block; import net.minecraft.server.v1_7_R2.Block;
import net.minecraft.server.v1_7_R2.BlockEnderChest; import net.minecraft.server.v1_7_R2.BlockEnderChest;
@@ -37,7 +36,6 @@ import net.minecraft.server.v1_7_R2.TileEntityChest;
import net.minecraft.server.v1_7_R2.TileEntityEnderChest; import net.minecraft.server.v1_7_R2.TileEntityEnderChest;
import net.minecraft.server.v1_7_R2.World; import net.minecraft.server.v1_7_R2.World;
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_7_R2.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_7_R2.event.CraftEventFactory;
public class AnySilentContainer implements IAnySilentContainer { public class AnySilentContainer implements IAnySilentContainer {
@@ -50,7 +48,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) { public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) {
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest // FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
World world = player.world; World world = player.world;
if (block instanceof BlockEnderChest) { if (block instanceof BlockEnderChest) {
@@ -98,7 +96,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) { public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) {
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
// Silent ender chest is API-only // Silent ender chest is API-only
if (silentchest && block.getType() == Material.ENDER_CHEST) { if (silentchest && block.getType() == Material.ENDER_CHEST) {

View File

@@ -23,7 +23,6 @@ import com.lishid.openinv.util.InternalAccessor;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_7_R2.IInventory; import net.minecraft.server.v1_7_R2.IInventory;
import org.bukkit.craftbukkit.v1_7_R2.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_7_R2.inventory.CraftInventory;

View File

@@ -23,15 +23,16 @@ import com.lishid.openinv.internal.IPlayerDataManager;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
//Volatile
import net.minecraft.server.v1_7_R2.EntityPlayer; import net.minecraft.server.v1_7_R2.EntityPlayer;
import net.minecraft.server.v1_7_R2.MinecraftServer; import net.minecraft.server.v1_7_R2.MinecraftServer;
import net.minecraft.server.v1_7_R2.PlayerInteractManager; import net.minecraft.server.v1_7_R2.PlayerInteractManager;
import net.minecraft.util.com.mojang.authlib.GameProfile; import net.minecraft.util.com.mojang.authlib.GameProfile;
import org.bukkit.craftbukkit.v1_7_R2.CraftServer; import org.bukkit.craftbukkit.v1_7_R2.CraftServer;
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftPlayer;
@SuppressWarnings("deprecation") // Deprecated methods are used properly and will not change. @SuppressWarnings("deprecation") // Deprecated methods are used properly and will not change.
public class PlayerDataManager implements IPlayerDataManager { public class PlayerDataManager implements IPlayerDataManager {
@@ -79,4 +80,24 @@ public class PlayerDataManager implements IPlayerDataManager {
return Arrays.asList(Bukkit.getOnlinePlayers()); return Arrays.asList(Bukkit.getOnlinePlayers());
} }
public static EntityPlayer getHandle(Player player) {
if (player instanceof CraftPlayer) {
return ((CraftPlayer) player).getHandle();
}
Server server = player.getServer();
EntityPlayer nmsPlayer = null;
if (server instanceof CraftServer) {
nmsPlayer = ((CraftServer) server).getHandle().getPlayer(player.getName());
}
if (nmsPlayer == null) {
// Could use reflection to examine fields, but it's honestly not worth the bother.
throw new RuntimeException("Unable to fetch EntityPlayer from provided Player implementation");
}
return nmsPlayer;
}
} }

View File

@@ -16,7 +16,6 @@
package com.lishid.openinv.internal.v1_7_R2; package com.lishid.openinv.internal.v1_7_R2;
// Volatile
import net.minecraft.server.v1_7_R2.ContainerChest; import net.minecraft.server.v1_7_R2.ContainerChest;
import net.minecraft.server.v1_7_R2.EntityHuman; import net.minecraft.server.v1_7_R2.EntityHuman;
import net.minecraft.server.v1_7_R2.IInventory; import net.minecraft.server.v1_7_R2.IInventory;

View File

@@ -27,7 +27,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
// Volatile import net.minecraft.server.v1_7_R2.EntityPlayer;
import net.minecraft.server.v1_7_R2.IInventory; import net.minecraft.server.v1_7_R2.IInventory;
import net.minecraft.server.v1_7_R2.InventoryEnderChest; import net.minecraft.server.v1_7_R2.InventoryEnderChest;
import net.minecraft.server.v1_7_R2.InventorySubcontainer; import net.minecraft.server.v1_7_R2.InventorySubcontainer;
@@ -46,13 +46,13 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
private CraftPlayer owner; private CraftPlayer owner;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
public SpecialEnderChest(Player p, Boolean online) { public SpecialEnderChest(Player player, Boolean online) {
super(((CraftPlayer) p).getHandle().getEnderChest().getInventoryName(), super(((CraftPlayer) player).getHandle().getEnderChest().getInventoryName(),
((CraftPlayer) p).getHandle().getEnderChest().k_(), ((CraftPlayer) player).getHandle().getEnderChest().k_(),
((CraftPlayer) p).getHandle().getEnderChest().getSize()); ((CraftPlayer) player).getHandle().getEnderChest().getSize());
CraftPlayer player = (CraftPlayer) p; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
this.enderChest = player.getHandle().getEnderChest(); this.enderChest = nmsPlayer.getEnderChest();
this.owner = player; this.owner = nmsPlayer.getBukkitEntity();
this.items = enderChest.getContents(); this.items = enderChest.getContents();
} }
@@ -65,8 +65,9 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
owner = (CraftPlayer) player; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest(); this.owner = nmsPlayer.getBukkitEntity();
InventoryEnderChest playerEnderChest = nmsPlayer.getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);

View File

@@ -21,11 +21,9 @@ import com.lishid.openinv.internal.ISpecialPlayerInventory;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_7_R2.ItemStack; import net.minecraft.server.v1_7_R2.ItemStack;
import net.minecraft.server.v1_7_R2.PlayerInventory; import net.minecraft.server.v1_7_R2.PlayerInventory;
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_7_R2.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_7_R2.inventory.CraftInventory;
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory { public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
@@ -35,7 +33,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
private boolean playerOnline = false; private boolean playerOnline = false;
public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) { public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) {
super(((CraftPlayer) bukkitPlayer).getHandle()); super(PlayerDataManager.getHandle(bukkitPlayer));
this.playerOnline = online; this.playerOnline = online;
this.items = player.inventory.items; this.items = player.inventory.items;
this.armor = player.inventory.armor; this.armor = player.inventory.armor;
@@ -49,7 +47,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override @Override
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
this.player = ((CraftPlayer) player).getHandle(); this.player = PlayerDataManager.getHandle(player);
this.player.inventory.items = this.items; this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor; this.player.inventory.armor = this.armor;
playerOnline = true; playerOnline = true;

View File

@@ -5,24 +5,24 @@
<parent> <parent>
<groupId>com.lishid</groupId> <groupId>com.lishid</groupId>
<artifactId>openinvinternal</artifactId> <artifactId>openinvinternal</artifactId>
<version>1.0-SNAPSHOT</version> <version>3.1.2</version>
</parent> </parent>
<artifactId>openinvadapter1_7_R3</artifactId> <artifactId>openinvadapter1_7_R3</artifactId>
<name>OpenInvAdapter1_7_R3</name> <name>OpenInvAdapter1_7_R3</name>
<dependencies> <dependencies>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>org.bukkit</groupId> <groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId> <artifactId>craftbukkit</artifactId>
<version>1.7.9-R0.2-SNAPSHOT</version> <version>1.7.9-R0.2-SNAPSHOT</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>3.1.2</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -22,7 +22,6 @@ import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_7_R3.AxisAlignedBB; import net.minecraft.server.v1_7_R3.AxisAlignedBB;
import net.minecraft.server.v1_7_R3.Block; import net.minecraft.server.v1_7_R3.Block;
import net.minecraft.server.v1_7_R3.BlockEnderChest; import net.minecraft.server.v1_7_R3.BlockEnderChest;
@@ -37,7 +36,6 @@ import net.minecraft.server.v1_7_R3.TileEntityChest;
import net.minecraft.server.v1_7_R3.TileEntityEnderChest; import net.minecraft.server.v1_7_R3.TileEntityEnderChest;
import net.minecraft.server.v1_7_R3.World; import net.minecraft.server.v1_7_R3.World;
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_7_R3.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_7_R3.event.CraftEventFactory;
public class AnySilentContainer implements IAnySilentContainer { public class AnySilentContainer implements IAnySilentContainer {
@@ -50,7 +48,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) { public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) {
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest // FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
World world = player.world; World world = player.world;
if (block instanceof BlockEnderChest) { if (block instanceof BlockEnderChest) {
@@ -98,7 +96,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) { public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) {
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
// Silent ender chest is API-only // Silent ender chest is API-only
if (silentchest && block.getType() == Material.ENDER_CHEST) { if (silentchest && block.getType() == Material.ENDER_CHEST) {

View File

@@ -23,7 +23,6 @@ import com.lishid.openinv.util.InternalAccessor;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_7_R3.IInventory; import net.minecraft.server.v1_7_R3.IInventory;
import org.bukkit.craftbukkit.v1_7_R3.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_7_R3.inventory.CraftInventory;

View File

@@ -24,15 +24,16 @@ import com.lishid.openinv.internal.IPlayerDataManager;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_7_R3.EntityPlayer; import net.minecraft.server.v1_7_R3.EntityPlayer;
import net.minecraft.server.v1_7_R3.MinecraftServer; import net.minecraft.server.v1_7_R3.MinecraftServer;
import net.minecraft.server.v1_7_R3.PlayerInteractManager; import net.minecraft.server.v1_7_R3.PlayerInteractManager;
import net.minecraft.util.com.mojang.authlib.GameProfile; import net.minecraft.util.com.mojang.authlib.GameProfile;
import org.bukkit.craftbukkit.v1_7_R3.CraftServer; import org.bukkit.craftbukkit.v1_7_R3.CraftServer;
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftPlayer;
public class PlayerDataManager implements IPlayerDataManager { public class PlayerDataManager implements IPlayerDataManager {
@@ -85,4 +86,24 @@ public class PlayerDataManager implements IPlayerDataManager {
return Arrays.asList(Bukkit.getOnlinePlayers()); return Arrays.asList(Bukkit.getOnlinePlayers());
} }
public static EntityPlayer getHandle(Player player) {
if (player instanceof CraftPlayer) {
return ((CraftPlayer) player).getHandle();
}
Server server = player.getServer();
EntityPlayer nmsPlayer = null;
if (server instanceof CraftServer) {
nmsPlayer = ((CraftServer) server).getHandle().getPlayer(player.getName());
}
if (nmsPlayer == null) {
// Could use reflection to examine fields, but it's honestly not worth the bother.
throw new RuntimeException("Unable to fetch EntityPlayer from provided Player implementation");
}
return nmsPlayer;
}
} }

View File

@@ -16,7 +16,6 @@
package com.lishid.openinv.internal.v1_7_R3; package com.lishid.openinv.internal.v1_7_R3;
// Volatile
import net.minecraft.server.v1_7_R3.ContainerChest; import net.minecraft.server.v1_7_R3.ContainerChest;
import net.minecraft.server.v1_7_R3.EntityHuman; import net.minecraft.server.v1_7_R3.EntityHuman;
import net.minecraft.server.v1_7_R3.IInventory; import net.minecraft.server.v1_7_R3.IInventory;

View File

@@ -27,7 +27,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
// Volatile import net.minecraft.server.v1_7_R3.EntityPlayer;
import net.minecraft.server.v1_7_R3.IInventory; import net.minecraft.server.v1_7_R3.IInventory;
import net.minecraft.server.v1_7_R3.InventoryEnderChest; import net.minecraft.server.v1_7_R3.InventoryEnderChest;
import net.minecraft.server.v1_7_R3.InventorySubcontainer; import net.minecraft.server.v1_7_R3.InventorySubcontainer;
@@ -46,13 +46,13 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
private CraftPlayer owner; private CraftPlayer owner;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
public SpecialEnderChest(Player p, Boolean online) { public SpecialEnderChest(Player player, Boolean online) {
super(((CraftPlayer) p).getHandle().getEnderChest().getInventoryName(), super(PlayerDataManager.getHandle(player).getEnderChest().getInventoryName(),
((CraftPlayer) p).getHandle().getEnderChest().k_(), PlayerDataManager.getHandle(player).getEnderChest().k_(),
((CraftPlayer) p).getHandle().getEnderChest().getSize()); PlayerDataManager.getHandle(player).getEnderChest().getSize());
CraftPlayer player = (CraftPlayer) p; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
this.enderChest = player.getHandle().getEnderChest(); this.enderChest = nmsPlayer.getEnderChest();
this.owner = player; this.owner = nmsPlayer.getBukkitEntity();
this.items = enderChest.getContents(); this.items = enderChest.getContents();
} }
@@ -65,8 +65,9 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
owner = (CraftPlayer) player; EntityPlayer nmsPlayer = PlayerDataManager.getHandle(player);
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest(); this.owner = nmsPlayer.getBukkitEntity();
InventoryEnderChest playerEnderChest = nmsPlayer.getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);

View File

@@ -21,11 +21,9 @@ import com.lishid.openinv.internal.ISpecialPlayerInventory;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_7_R3.ItemStack; import net.minecraft.server.v1_7_R3.ItemStack;
import net.minecraft.server.v1_7_R3.PlayerInventory; import net.minecraft.server.v1_7_R3.PlayerInventory;
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_7_R3.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_7_R3.inventory.CraftInventory;
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory { public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
@@ -35,7 +33,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
private boolean playerOnline = false; private boolean playerOnline = false;
public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) { public SpecialPlayerInventory(Player bukkitPlayer, Boolean online) {
super(((CraftPlayer) bukkitPlayer).getHandle()); super(PlayerDataManager.getHandle(bukkitPlayer));
this.playerOnline = online; this.playerOnline = online;
this.items = player.inventory.items; this.items = player.inventory.items;
this.armor = player.inventory.armor; this.armor = player.inventory.armor;
@@ -49,7 +47,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override @Override
public void setPlayerOnline(Player player) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
this.player = ((CraftPlayer) player).getHandle(); this.player = PlayerDataManager.getHandle(player);
this.player.inventory.items = this.items; this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor; this.player.inventory.armor = this.armor;
playerOnline = true; playerOnline = true;

View File

@@ -5,18 +5,13 @@
<parent> <parent>
<groupId>com.lishid</groupId> <groupId>com.lishid</groupId>
<artifactId>openinvinternal</artifactId> <artifactId>openinvinternal</artifactId>
<version>1.0-SNAPSHOT</version> <version>3.1.2</version>
</parent> </parent>
<artifactId>openinvadapter1_7_R4</artifactId> <artifactId>openinvadapter1_7_R4</artifactId>
<name>OpenInvAdapter1_7_R4</name> <name>OpenInvAdapter1_7_R4</name>
<dependencies> <dependencies>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>org.spigotmc</groupId> <groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId> <artifactId>spigot-api</artifactId>
@@ -29,6 +24,11 @@
<version>1.7.10-R0.1</version> <version>1.7.10-R0.1</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>com.lishid</groupId>
<artifactId>openinvcommon</artifactId>
<version>3.1.2</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -22,7 +22,6 @@ import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
// Volatile
import net.minecraft.server.v1_7_R4.AxisAlignedBB; import net.minecraft.server.v1_7_R4.AxisAlignedBB;
import net.minecraft.server.v1_7_R4.Block; import net.minecraft.server.v1_7_R4.Block;
import net.minecraft.server.v1_7_R4.BlockEnderChest; import net.minecraft.server.v1_7_R4.BlockEnderChest;
@@ -37,7 +36,6 @@ import net.minecraft.server.v1_7_R4.TileEntityChest;
import net.minecraft.server.v1_7_R4.TileEntityEnderChest; import net.minecraft.server.v1_7_R4.TileEntityEnderChest;
import net.minecraft.server.v1_7_R4.World; import net.minecraft.server.v1_7_R4.World;
import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_7_R4.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_7_R4.event.CraftEventFactory;
public class AnySilentContainer implements IAnySilentContainer { public class AnySilentContainer implements IAnySilentContainer {
@@ -50,7 +48,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) { public boolean isAnyContainerNeeded(Player p, org.bukkit.block.Block block) {
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest // FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
World world = player.world; World world = player.world;
if (block instanceof BlockEnderChest) { if (block instanceof BlockEnderChest) {
@@ -98,7 +96,7 @@ public class AnySilentContainer implements IAnySilentContainer {
@Override @Override
public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) { public boolean activateContainer(Player p, boolean silentchest, org.bukkit.block.Block block) {
EntityPlayer player = ((CraftPlayer) p).getHandle(); EntityPlayer player = PlayerDataManager.getHandle(p);
// Silent ender chest is API-only // Silent ender chest is API-only
if (silentchest && block.getType() == Material.ENDER_CHEST) { if (silentchest && block.getType() == Material.ENDER_CHEST) {

View File

@@ -23,7 +23,6 @@ import com.lishid.openinv.util.InternalAccessor;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
// Volatile
import net.minecraft.server.v1_7_R4.IInventory; import net.minecraft.server.v1_7_R4.IInventory;
import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftInventory;

Some files were not shown because too many files have changed in this diff Show More