Compare commits
44 Commits
2.4.4
...
uuid-rewor
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e4c23a777e | ||
|
|
4f40459b96 | ||
|
|
791368b100 | ||
|
|
5dd3f5bbd7 | ||
|
|
d1d60e55d5 | ||
|
|
471b631838 | ||
|
|
2f1fd87435 | ||
|
|
a03c73f8d6 | ||
|
|
f7029e5ee2 | ||
|
|
802e405c4e | ||
|
|
55deabe56b | ||
|
|
f8e4e69e53 | ||
|
|
3c7d1696ff | ||
|
|
902def1dd7 | ||
|
|
f260ed1175 | ||
|
|
bc40e91215 | ||
|
|
120b35d394 | ||
|
|
ded568ec3f | ||
|
|
e958059572 | ||
|
|
d988becf1f | ||
|
|
e8476d5b05 | ||
|
|
1ea0307156 | ||
|
|
4ae47b09dc | ||
|
|
3e9bb63894 | ||
|
|
dce86d9c69 | ||
|
|
4013098201 | ||
|
|
56f633d58b | ||
|
|
6c1fb14cda | ||
|
|
ad0e55cf4c | ||
|
|
c4fb5489fa | ||
|
|
3d3006c681 | ||
|
|
a9d983ddc6 | ||
|
|
f6554a2a51 | ||
|
|
ec3426b827 | ||
|
|
d0494aa2e7 | ||
|
|
6adcd491db | ||
|
|
bc709336e1 | ||
|
|
7d56a04283 | ||
|
|
7851404d69 | ||
|
|
30b5acc3b4 | ||
|
|
29b0bc980f | ||
|
|
b05279ed4b | ||
|
|
88f3cb0a3f | ||
|
|
f48fdac085 |
9
.gitignore
vendored
Normal file
9
.gitignore
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
/.settings
|
||||||
|
/.gitignore
|
||||||
|
/.project
|
||||||
|
/.classpath
|
||||||
|
/.idea
|
||||||
|
/target
|
||||||
|
/bin
|
||||||
|
/lib
|
||||||
|
/out
|
||||||
@@ -1,16 +1,3 @@
|
|||||||
## Goals
|
|
||||||
This fork of OpenInv was created when the lag caused by offline player lookups post-UUID migration became too much to bear. Overall, it does not differ much from the original.
|
|
||||||
|
|
||||||
### Changes of Note
|
|
||||||
- Removed updater
|
|
||||||
- Removed wand
|
|
||||||
- New configuration option `DisableSaving`: Inventory edits will not be saved unless the user is online.
|
|
||||||
|
|
||||||
## Previous Versions
|
|
||||||
This fork supports any version after 1.4.5. Binaries are available in the [releases tab](https://github.com/Jikoo/OpenInv/releases). Please allow a brief period after the release of a new version for updates.
|
|
||||||
|
|
||||||
## License
|
|
||||||
```
|
|
||||||
Copyright (C) 2011-2014 lishid. All rights reserved.
|
Copyright (C) 2011-2014 lishid. All rights reserved.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
@@ -24,4 +11,3 @@ GNU General Public License for more details.
|
|||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
```
|
|
||||||
197
pom.xml
197
pom.xml
@@ -1,141 +1,62 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
<modelVersion>4.0.0</modelVersion>
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<groupId>OpenInv</groupId>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>OpenInv</artifactId>
|
<groupId>com.lishid</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<artifactId>openinv</artifactId>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<version>2.3.1</version>
|
||||||
|
<name>OpenInv</name>
|
||||||
|
<url>http://dev.bukkit.org/bukkit-plugins/openinv/</url>
|
||||||
|
|
||||||
<dependencies>
|
<properties>
|
||||||
<dependency>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<groupId>org.spigotmc</groupId>
|
</properties>
|
||||||
<artifactId>spigot</artifactId>
|
|
||||||
<version>1.9-R0.1-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
<classifier>v1_9_R1</classifier>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.spigotmc</groupId>
|
|
||||||
<artifactId>spigot</artifactId>
|
|
||||||
<version>1.8.8-R0.1-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
<classifier>v1_8_R3</classifier>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.spigotmc</groupId>
|
|
||||||
<artifactId>spigot</artifactId>
|
|
||||||
<version>1.8.3-R0.1-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
<classifier>v1_8_R2</classifier>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.spigotmc</groupId>
|
|
||||||
<artifactId>spigot</artifactId>
|
|
||||||
<version>1.8-R0.1-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
<classifier>v1_8_R1</classifier>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>craftbukkit</artifactId>
|
|
||||||
<version>1.7.10-R0.1-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
<classifier>v1_7_R4</classifier>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>craftbukkit</artifactId>
|
|
||||||
<version>1.7.9-R0.2-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
<classifier>v1_7_R3</classifier>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>craftbukkit</artifactId>
|
|
||||||
<version>1.7.5-R0.1-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
<classifier>v1_7_R2</classifier>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>craftbukkit</artifactId>
|
|
||||||
<version>1.7.2-R0.4-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
<classifier>v1_7_R1</classifier>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>craftbukkit</artifactId>
|
|
||||||
<version>1.6.4-R2.0-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
<classifier>v1_6_R3</classifier>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>craftbukkit</artifactId>
|
|
||||||
<version>1.6.2-R1.1-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
<classifier>v1_6_R2</classifier>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>craftbukkit</artifactId>
|
|
||||||
<version>1.6.1-R0.1-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
<classifier>v1_6_R1</classifier>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>craftbukkit</artifactId>
|
|
||||||
<version>1.5.2-R1.0-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
<classifier>v1_5_R3</classifier>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>craftbukkit</artifactId>
|
|
||||||
<version>1.5.1-R0.1-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
<classifier>v1_5_R2</classifier>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>craftbukkit</artifactId>
|
|
||||||
<version>1.5-R0.1-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
<classifier>v1_5_R1</classifier>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>craftbukkit</artifactId>
|
|
||||||
<version>1.4.7-R1.1-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
<classifier>v1_4_R1</classifier>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>craftbukkit</artifactId>
|
|
||||||
<version>1.4.6-R0.4-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
<classifier>v1_4_6</classifier>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>craftbukkit</artifactId>
|
|
||||||
<version>1.4.5-R1.1-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
<classifier>v1_4_5</classifier>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
<build>
|
<repositories>
|
||||||
<plugins>
|
<repository>
|
||||||
<plugin>
|
<id>bukkit-repo</id>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<url>https://hub.spigotmc.org/nexus/content/groups/public/</url>
|
||||||
<version>3.1</version>
|
</repository>
|
||||||
<configuration>
|
</repositories>
|
||||||
<source>1.6</source>
|
|
||||||
<target>1.6</target>
|
<dependencies>
|
||||||
</configuration>
|
<dependency>
|
||||||
</plugin>
|
<groupId>org.bukkit</groupId>
|
||||||
</plugins>
|
<artifactId>bukkit</artifactId>
|
||||||
</build>
|
<version>1.8.7-R0.1-SNAPSHOT</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.bukkit</groupId>
|
||||||
|
<artifactId>craftbukkit</artifactId>
|
||||||
|
<version>1.8.7-R0.1-SNAPSHOT</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<defaultGoal>clean install</defaultGoal>
|
||||||
|
<sourceDirectory>src/main/java</sourceDirectory>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/resources</directory>
|
||||||
|
<filtering>true</filtering>
|
||||||
|
<excludes>
|
||||||
|
<exclude>**/*.java</exclude>
|
||||||
|
</excludes>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>2.3.2</version>
|
||||||
|
<configuration>
|
||||||
|
<source>1.6</source>
|
||||||
|
<target>1.6</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
</project>
|
</project>
|
||||||
160
src/main/java/com/lishid/openinv/ConfigUpdater.java
Normal file
160
src/main/java/com/lishid/openinv/ConfigUpdater.java
Normal file
@@ -0,0 +1,160 @@
|
|||||||
|
package com.lishid.openinv;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
|
||||||
|
import com.lishid.openinv.utils.UUIDUtil;
|
||||||
|
|
||||||
|
public class ConfigUpdater {
|
||||||
|
private final OpenInv plugin;
|
||||||
|
|
||||||
|
private static final int CONFIG_VERSION = 2;
|
||||||
|
|
||||||
|
public ConfigUpdater(OpenInv plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getConfigVersion() {
|
||||||
|
return plugin.getConfig().getInt("config-version", 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isConfigOutdated() {
|
||||||
|
return getConfigVersion() < CONFIG_VERSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void checkForUpdates() {
|
||||||
|
if (isConfigOutdated()) {
|
||||||
|
plugin.getLogger().info("[Config] Update found! Performing update...");
|
||||||
|
performUpdate();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
plugin.getLogger().info("[Config] Update not required.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void performUpdate() {
|
||||||
|
// Update according to the right version
|
||||||
|
switch (getConfigVersion()) {
|
||||||
|
case 1:
|
||||||
|
updateConfig1To2();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateConfig1To2() {
|
||||||
|
FileConfiguration config = plugin.getConfig();
|
||||||
|
|
||||||
|
// Backup the old config file
|
||||||
|
File configFile = new File(plugin.getDataFolder(), "config.yml");
|
||||||
|
File oldConfigFile = new File(plugin.getDataFolder(), "config_old.yml");
|
||||||
|
|
||||||
|
configFile.renameTo(oldConfigFile);
|
||||||
|
|
||||||
|
if (configFile.exists()) {
|
||||||
|
configFile.delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
plugin.getLogger().info("[Config] Backup of old config.yml file created.");
|
||||||
|
|
||||||
|
// Get the old config settings
|
||||||
|
int itemOpenInvItemId = config.getInt("ItemOpenInvItemID", 280);
|
||||||
|
boolean notifySilentChest = config.getBoolean("NotifySilentChest", true);
|
||||||
|
boolean notifyAnyChest = config.getBoolean("NotifyAnyChest", true);
|
||||||
|
|
||||||
|
Map<UUID, Boolean> anyChestToggles = null;
|
||||||
|
Map<UUID, Boolean> itemOpenInvToggles = null;
|
||||||
|
Map<UUID, Boolean> silentChestToggles = null;
|
||||||
|
|
||||||
|
if (config.isSet("AnyChest")) {
|
||||||
|
anyChestToggles = updateToggles("AnyChest");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config.isSet("ItemOpenInv")) {
|
||||||
|
itemOpenInvToggles = updateToggles("ItemOpenInv");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config.isSet("SilentChest")) {
|
||||||
|
silentChestToggles = updateToggles("SilentChest");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear the old config
|
||||||
|
for (String key : config.getKeys(false)) {
|
||||||
|
config.set(key, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the new config options
|
||||||
|
plugin.saveDefaultConfig();
|
||||||
|
plugin.reloadConfig();
|
||||||
|
|
||||||
|
config = plugin.getConfig(); // Refresh the referenced plugin config
|
||||||
|
|
||||||
|
config.set("config-version", 2);
|
||||||
|
config.set("items.open-inv", getMaterialById(itemOpenInvItemId).toString());
|
||||||
|
config.set("notify.any-chest", notifyAnyChest);
|
||||||
|
config.set("notify.silent-chest", notifySilentChest);
|
||||||
|
|
||||||
|
if (anyChestToggles != null && !anyChestToggles.isEmpty()) {
|
||||||
|
for (Map.Entry<UUID, Boolean> entry : anyChestToggles.entrySet()) {
|
||||||
|
config.set("toggles.any-chest." + entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itemOpenInvToggles != null && !itemOpenInvToggles.isEmpty()) {
|
||||||
|
for (Map.Entry<UUID, Boolean> entry : itemOpenInvToggles.entrySet()) {
|
||||||
|
config.set("toggles.items.open-inv." + entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (silentChestToggles != null && !silentChestToggles.isEmpty()) {
|
||||||
|
for (Map.Entry<UUID, Boolean> entry : silentChestToggles.entrySet()) {
|
||||||
|
config.set("toggles.silent-chest." + entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save the new config
|
||||||
|
plugin.saveConfig();
|
||||||
|
plugin.getLogger().info("[Config] Update complete.");
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<UUID, Boolean> updateToggles(String sectionName) {
|
||||||
|
Map<UUID, Boolean> toggles = new HashMap<UUID, Boolean>();
|
||||||
|
|
||||||
|
ConfigurationSection section = plugin.getConfig().getConfigurationSection(sectionName);
|
||||||
|
Set<String> keys = section.getKeys(false);
|
||||||
|
if (keys == null || keys.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
int total = keys.size();
|
||||||
|
int converted = 0;
|
||||||
|
|
||||||
|
for (String playerName : keys) {
|
||||||
|
UUID uuid = UUIDUtil.getUUIDOf(playerName);
|
||||||
|
if (uuid != null) {
|
||||||
|
boolean toggled = section.getBoolean(playerName + ".toggle", false);
|
||||||
|
toggles.put(uuid, toggled);
|
||||||
|
converted++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
plugin.getLogger().info("[Config] Converted (" + converted + "/" + total + ") " + sectionName + " toggle player usernames to UUIDs.");
|
||||||
|
|
||||||
|
return toggles;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
private Material getMaterialById(int id) {
|
||||||
|
Material material = Material.getMaterial(id);
|
||||||
|
if (material == null) {
|
||||||
|
material = Material.STICK;
|
||||||
|
}
|
||||||
|
return material;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,26 +18,31 @@ package com.lishid.openinv;
|
|||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.permissions.Permissible;
|
import org.bukkit.permissions.Permissible;
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
import com.lishid.openinv.commands.AnyChestPluginCommand;
|
import com.lishid.openinv.commands.AnyChestCommand;
|
||||||
import com.lishid.openinv.commands.OpenEnderPluginCommand;
|
import com.lishid.openinv.commands.OpenEnderCommand;
|
||||||
import com.lishid.openinv.commands.OpenInvPluginCommand;
|
import com.lishid.openinv.commands.OpenInvCommand;
|
||||||
import com.lishid.openinv.commands.SearchInvPluginCommand;
|
import com.lishid.openinv.commands.SearchEnderCommand;
|
||||||
import com.lishid.openinv.commands.SilentChestPluginCommand;
|
import com.lishid.openinv.commands.SearchInvCommand;
|
||||||
import com.lishid.openinv.internal.IAnySilentChest;
|
import com.lishid.openinv.commands.SilentChestCommand;
|
||||||
import com.lishid.openinv.internal.IInventoryAccess;
|
import com.lishid.openinv.commands.ToggleOpenInvCommand;
|
||||||
import com.lishid.openinv.internal.ISpecialEnderChest;
|
import com.lishid.openinv.internal.AnySilentChest;
|
||||||
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
import com.lishid.openinv.internal.InventoryAccess;
|
||||||
import com.lishid.openinv.internal.InternalAccessor;
|
|
||||||
import com.lishid.openinv.internal.PlayerDataManager;
|
import com.lishid.openinv.internal.PlayerDataManager;
|
||||||
|
import com.lishid.openinv.internal.SpecialEnderChest;
|
||||||
|
import com.lishid.openinv.internal.SpecialPlayerInventory;
|
||||||
|
import com.lishid.openinv.listeners.OpenInvEntityListener;
|
||||||
|
import com.lishid.openinv.listeners.OpenInvInventoryListener;
|
||||||
|
import com.lishid.openinv.listeners.OpenInvPlayerListener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Open other player's inventory
|
* Open other player's inventory
|
||||||
@@ -45,173 +50,165 @@ import com.lishid.openinv.internal.PlayerDataManager;
|
|||||||
* @author lishid
|
* @author lishid
|
||||||
*/
|
*/
|
||||||
public class OpenInv extends JavaPlugin {
|
public class OpenInv extends JavaPlugin {
|
||||||
|
public static final Map<UUID, SpecialPlayerInventory> inventories = new HashMap<UUID, SpecialPlayerInventory>();
|
||||||
|
public static final Map<UUID, SpecialEnderChest> enderChests = new HashMap<UUID, SpecialEnderChest>();
|
||||||
|
|
||||||
private final Map<String, ISpecialPlayerInventory> inventories = new HashMap<String, ISpecialPlayerInventory>();
|
public static OpenInv mainPlugin;
|
||||||
private final Map<String, ISpecialEnderChest> enderChests = new HashMap<String, ISpecialEnderChest>();
|
|
||||||
|
|
||||||
private InternalAccessor accessor;
|
private static PlayerDataManager playerLoader;
|
||||||
private PlayerDataManager playerLoader;
|
private static InventoryAccess inventoryAccess;
|
||||||
private IInventoryAccess inventoryAccess;
|
private static AnySilentChest anySilentChest;
|
||||||
private IAnySilentChest anySilentChest;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
// Get plugin manager
|
// Plugin
|
||||||
|
mainPlugin = this;
|
||||||
|
|
||||||
|
// Config Updater
|
||||||
|
ConfigUpdater configUpdater = new ConfigUpdater(this);
|
||||||
|
configUpdater.checkForUpdates();
|
||||||
|
|
||||||
|
// Initialize
|
||||||
|
playerLoader = new PlayerDataManager();
|
||||||
|
inventoryAccess = new InventoryAccess();
|
||||||
|
anySilentChest = new AnySilentChest();
|
||||||
|
|
||||||
|
// Save the default config.yml if it doesn't already exist
|
||||||
|
saveDefaultConfig();
|
||||||
|
|
||||||
|
// Register the plugin's events & commands
|
||||||
|
registerEvents();
|
||||||
|
registerCommands();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void registerEvents() {
|
||||||
PluginManager pm = getServer().getPluginManager();
|
PluginManager pm = getServer().getPluginManager();
|
||||||
|
|
||||||
accessor = new InternalAccessor(this);
|
pm.registerEvents(new OpenInvPlayerListener(), this);
|
||||||
// Version check
|
pm.registerEvents(new OpenInvEntityListener(), this);
|
||||||
if (!accessor.initialize(getServer())) {
|
pm.registerEvents(new OpenInvInventoryListener(), this);
|
||||||
getLogger().info("Your version of CraftBukkit is not supported.");
|
|
||||||
getLogger().info("Please look for an updated version of OpenInv.");
|
|
||||||
pm.disablePlugin(this);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
playerLoader = accessor.newPlayerDataManager();
|
|
||||||
inventoryAccess = accessor.newInventoryAccess();
|
|
||||||
anySilentChest = accessor.newAnySilentChest();
|
|
||||||
|
|
||||||
FileConfiguration config = getConfig();
|
|
||||||
boolean dirtyConfig = false;
|
|
||||||
if (!config.isBoolean("NotifySilentChest")) {
|
|
||||||
config.set("NotifySilentChest", true);
|
|
||||||
dirtyConfig = true;
|
|
||||||
}
|
|
||||||
if (!config.isBoolean("NotifyAnyChest")) {
|
|
||||||
config.set("NotifyAnyChest", true);
|
|
||||||
dirtyConfig = true;
|
|
||||||
}
|
|
||||||
if (!config.isBoolean("DisableSaving")) {
|
|
||||||
config.set("DisableSaving", false);
|
|
||||||
dirtyConfig = true;
|
|
||||||
}
|
|
||||||
config.addDefault("NotifySilentChest", true);
|
|
||||||
config.addDefault("NotifyAnyChest", true);
|
|
||||||
config.addDefault("DisableSaving", false);
|
|
||||||
config.options().copyDefaults(true);
|
|
||||||
if (dirtyConfig) {
|
|
||||||
saveConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
pm.registerEvents(new OpenInvPlayerListener(this), this);
|
|
||||||
pm.registerEvents(new OpenInvInventoryListener(this), this);
|
|
||||||
|
|
||||||
getCommand("openinv").setExecutor(new OpenInvPluginCommand(this));
|
|
||||||
getCommand("searchinv").setExecutor(new SearchInvPluginCommand());
|
|
||||||
getCommand("silentchest").setExecutor(new SilentChestPluginCommand(this));
|
|
||||||
getCommand("anychest").setExecutor(new AnyChestPluginCommand(this));
|
|
||||||
getCommand("openender").setExecutor(new OpenEnderPluginCommand(this));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public InternalAccessor getInternalAccessor() {
|
private void registerCommands() {
|
||||||
return this.accessor;
|
getCommand("openinv").setExecutor(new OpenInvCommand(this));
|
||||||
|
getCommand("openender").setExecutor(new OpenEnderCommand(this));
|
||||||
|
getCommand("searchinv").setExecutor(new SearchInvCommand());
|
||||||
|
getCommand("searchender").setExecutor(new SearchEnderCommand());
|
||||||
|
getCommand("toggleopeninv").setExecutor(new ToggleOpenInvCommand());
|
||||||
|
getCommand("anychest").setExecutor(new AnyChestCommand());
|
||||||
|
getCommand("silentchest").setExecutor(new SilentChestCommand());
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerDataManager getPlayerLoader() {
|
public static PlayerDataManager getPlayerLoader() {
|
||||||
return this.playerLoader;
|
return playerLoader;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IInventoryAccess getInventoryAccess() {
|
public static InventoryAccess getInventoryAccess() {
|
||||||
return this.inventoryAccess;
|
return inventoryAccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IAnySilentChest getAnySilentChest() {
|
public static AnySilentChest getAnySilentChest() {
|
||||||
return this.anySilentChest;
|
return anySilentChest;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ISpecialPlayerInventory getInventoryFor(Player player) {
|
public static Object getFromConfig(String path, Object defaultValue) {
|
||||||
String id = getPlayerLoader().getPlayerDataID(player);
|
Object val = mainPlugin.getConfig().get(path);
|
||||||
if (inventories.containsKey(id)) {
|
if (val == null) {
|
||||||
return inventories.get(id);
|
mainPlugin.getConfig().set(path, defaultValue);
|
||||||
|
return defaultValue;
|
||||||
}
|
}
|
||||||
return null;
|
else {
|
||||||
}
|
return val;
|
||||||
|
|
||||||
public ISpecialPlayerInventory getOrCreateInventoryFor(Player player, boolean online) {
|
|
||||||
String id = getPlayerLoader().getPlayerDataID(player);
|
|
||||||
if (inventories.containsKey(id)) {
|
|
||||||
return inventories.get(id);
|
|
||||||
}
|
|
||||||
ISpecialPlayerInventory inv = getInternalAccessor().newSpecialPlayerInventory(player, online);
|
|
||||||
inventories.put(id, inv);
|
|
||||||
return inv;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void removeLoadedInventory(Player player) {
|
|
||||||
String id = getPlayerLoader().getPlayerDataID(player);
|
|
||||||
if (inventories.containsKey(id)) {
|
|
||||||
inventories.remove(id);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ISpecialEnderChest getEnderChestFor(Player player) {
|
public static void saveToConfig(String path, Object value) {
|
||||||
String id = getPlayerLoader().getPlayerDataID(player);
|
mainPlugin.getConfig().set(path, value);
|
||||||
if (enderChests.containsKey(id)) {
|
mainPlugin.saveConfig();
|
||||||
return enderChests.get(id);
|
}
|
||||||
|
|
||||||
|
public static Material getOpenInvItem() {
|
||||||
|
if (!mainPlugin.getConfig().isSet("items.open-inv")) {
|
||||||
|
saveToConfig("items.open-inv", "STICK");
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ISpecialEnderChest getOrCreateEnderChestFor(Player player, boolean online) {
|
String itemName = mainPlugin.getConfig().getString("items.open-inv", "STICK");
|
||||||
String id = getPlayerLoader().getPlayerDataID(player);
|
Material material = Material.getMaterial(itemName);
|
||||||
if (enderChests.containsKey(id)) {
|
if (material == null) {
|
||||||
return enderChests.get(id);
|
mainPlugin.getLogger().warning("OpenInv item '" + itemName + "' does not match to a valid item. Defaulting to stick.");
|
||||||
|
material = Material.STICK;
|
||||||
}
|
}
|
||||||
ISpecialEnderChest inv = getInternalAccessor().newSpecialEnderChest(player, online);
|
|
||||||
enderChests.put(id, inv);
|
return material;
|
||||||
return inv;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeLoadedEnderChest(Player player) {
|
public static boolean notifySilentChest() {
|
||||||
String id = getPlayerLoader().getPlayerDataID(player);
|
return mainPlugin.getConfig().getBoolean("notify.silent-chest", true);
|
||||||
if (enderChests.containsKey(id)) {
|
|
||||||
enderChests.remove(id);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean disableSaving() {
|
public static boolean notifyAnyChest() {
|
||||||
return getConfig().getBoolean("DisableSaving", false);
|
return mainPlugin.getConfig().getBoolean("notify.any-chest", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean notifySilentChest() {
|
public static boolean getPlayerAnyChestStatus(Player player) {
|
||||||
return getConfig().getBoolean("NotifySilentChest", true);
|
return mainPlugin.getConfig().getBoolean("toggles.any-chest." + player.getUniqueId(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean notifyAnyChest() {
|
public static void setPlayerAnyChestStatus(Player player, boolean status) {
|
||||||
return getConfig().getBoolean("NotifyAnyChest", true);
|
saveToConfig("toggles.any-chest." + player.getUniqueId(), status);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getPlayerSilentChestStatus(OfflinePlayer player) {
|
public static boolean getPlayerItemOpenInvStatus(Player player) {
|
||||||
return getConfig().getBoolean("SilentChest." + getPlayerLoader().getPlayerDataID(player) + ".toggle", false);
|
return mainPlugin.getConfig().getBoolean("toggles.items.open-inv" + player.getUniqueId(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPlayerSilentChestStatus(OfflinePlayer player, boolean status) {
|
public static void setPlayerItemOpenInvStatus(Player player, boolean status) {
|
||||||
getConfig().set("SilentChest." + getPlayerLoader().getPlayerDataID(player) + ".toggle", status);
|
saveToConfig("toggles.items.open-inv." + player.getUniqueId(), status);
|
||||||
saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getPlayerAnyChestStatus(OfflinePlayer player) {
|
public static boolean getPlayerSilentChestStatus(Player player) {
|
||||||
return getConfig().getBoolean("AnyChest." + getPlayerLoader().getPlayerDataID(player) + ".toggle", true);
|
return mainPlugin.getConfig().getBoolean("toggles.silent-chest." + player.getUniqueId(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPlayerAnyChestStatus(OfflinePlayer player, boolean status) {
|
public static void setPlayerSilentChestStatus(Player player, boolean status) {
|
||||||
getConfig().set("AnyChest." + getPlayerLoader().getPlayerDataID(player) + ".toggle", status);
|
saveToConfig("toggles.silent-chest." + player.getUniqueId(), status);
|
||||||
saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ShowHelp(Player player) {
|
public static void log(String text) {
|
||||||
player.sendMessage(ChatColor.GREEN + "/openinv <Player> - Open a player's inventory");
|
mainPlugin.getLogger().info("[OpenInv] " + text);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void log(Throwable e) {
|
||||||
|
mainPlugin.getLogger().severe("[OpenInv] " + e.toString());
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sendMessage(CommandSender sender, String message) {
|
||||||
|
sender.sendMessage(ChatColor.AQUA + "[OpenInv] " + ChatColor.WHITE + message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void showHelp(Player player) {
|
||||||
|
player.sendMessage(ChatColor.GREEN + "/openinv <player> - Open a player's inventory.");
|
||||||
player.sendMessage(ChatColor.GREEN + " (aliases: oi, inv, open)");
|
player.sendMessage(ChatColor.GREEN + " (aliases: oi, inv, open)");
|
||||||
player.sendMessage(ChatColor.GREEN + "/openender <Player> - Open a player's enderchest");
|
|
||||||
player.sendMessage(ChatColor.GREEN + " (aliases: oe, enderchest)");
|
player.sendMessage(ChatColor.GREEN + "/openender <player> - Open a player's ender chest.");
|
||||||
player.sendMessage(ChatColor.GREEN + "/searchinv <Item> [MinAmount] - ");
|
player.sendMessage(ChatColor.GREEN + " (aliases: oe)");
|
||||||
|
|
||||||
|
player.sendMessage(ChatColor.GREEN + "/searchinv <item> [minAmount] -");
|
||||||
player.sendMessage(ChatColor.GREEN + " Search and list players having a specific item.");
|
player.sendMessage(ChatColor.GREEN + " Search and list players having a specific item.");
|
||||||
player.sendMessage(ChatColor.GREEN + " (aliases: si, search)");
|
player.sendMessage(ChatColor.GREEN + " (aliases: si)");
|
||||||
player.sendMessage(ChatColor.GREEN + "/anychest - Toggle anychest function");
|
|
||||||
|
player.sendMessage(ChatColor.GREEN + "/searchender <item> [minAmount] -");
|
||||||
|
player.sendMessage(ChatColor.GREEN + " Search and list players having a specific item.");
|
||||||
|
player.sendMessage(ChatColor.GREEN + " (aliases: se)");
|
||||||
|
|
||||||
|
player.sendMessage(ChatColor.GREEN + "/toggleopeninv - Toggle the item openinv function.");
|
||||||
|
player.sendMessage(ChatColor.GREEN + " (aliases: toi, toggleoi, toggleinv)");
|
||||||
|
|
||||||
|
player.sendMessage(ChatColor.GREEN + "/anychest - Toggle the any chest function.");
|
||||||
player.sendMessage(ChatColor.GREEN + " (aliases: ac)");
|
player.sendMessage(ChatColor.GREEN + " (aliases: ac)");
|
||||||
player.sendMessage(ChatColor.GREEN + "/silentchest - Toggle silent chest function");
|
|
||||||
|
player.sendMessage(ChatColor.GREEN + "/silentchest - Toggle the silent chest function.");
|
||||||
player.sendMessage(ChatColor.GREEN + " (aliases: sc, silent)");
|
player.sendMessage(ChatColor.GREEN + " (aliases: sc, silent)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,135 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.block.Chest;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.Event.Result;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.EventPriority;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.event.block.Action;
|
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
import com.lishid.openinv.internal.ISpecialEnderChest;
|
|
||||||
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
|
||||||
|
|
||||||
public class OpenInvPlayerListener implements Listener {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
|
|
||||||
public OpenInvPlayerListener(OpenInv plugin) {
|
|
||||||
this.plugin = plugin;
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
|
||||||
public void onPlayerJoin(final PlayerJoinEvent event) {
|
|
||||||
new BukkitRunnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if (!event.getPlayer().isOnline()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ISpecialPlayerInventory inventory = plugin.getInventoryFor(event.getPlayer());
|
|
||||||
if (inventory != null) {
|
|
||||||
inventory.setPlayerOnline(event.getPlayer());
|
|
||||||
event.getPlayer().updateInventory();
|
|
||||||
}
|
|
||||||
ISpecialEnderChest chest = plugin.getEnderChestFor(event.getPlayer());
|
|
||||||
if (chest != null) {
|
|
||||||
chest.setPlayerOnline(event.getPlayer());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}.runTask(plugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
|
||||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
|
||||||
ISpecialPlayerInventory inventory = plugin.getInventoryFor(event.getPlayer());
|
|
||||||
if (inventory != null) {
|
|
||||||
if (inventory.setPlayerOffline()) {
|
|
||||||
plugin.removeLoadedInventory(event.getPlayer());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ISpecialEnderChest chest = plugin.getEnderChestFor(event.getPlayer());
|
|
||||||
if (chest != null) {
|
|
||||||
if (chest.setPlayerOffline()) {
|
|
||||||
plugin.removeLoadedEnderChest(event.getPlayer());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
|
||||||
public void onPlayerInteract(PlayerInteractEvent event) {
|
|
||||||
Player player = event.getPlayer();
|
|
||||||
|
|
||||||
if (event.getPlayer().isSneaking()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.useInteractedBlock() == Result.DENY) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock().getType() == org.bukkit.Material.ENDER_CHEST) {
|
|
||||||
if (OpenInv.hasPermission(player, Permissions.PERM_SILENT) && plugin.getPlayerSilentChestStatus(player)) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
player.openInventory(player.getEnderChest());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock().getState() instanceof Chest) {
|
|
||||||
boolean silentchest = false;
|
|
||||||
boolean anychest = false;
|
|
||||||
int x = event.getClickedBlock().getX();
|
|
||||||
int y = event.getClickedBlock().getY();
|
|
||||||
int z = event.getClickedBlock().getZ();
|
|
||||||
|
|
||||||
if (OpenInv.hasPermission(player, Permissions.PERM_SILENT) && plugin.getPlayerSilentChestStatus(player)) {
|
|
||||||
silentchest = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (OpenInv.hasPermission(player, Permissions.PERM_ANYCHEST) && plugin.getPlayerAnyChestStatus(player)) {
|
|
||||||
try {
|
|
||||||
anychest = plugin.getAnySilentChest().isAnyChestNeeded(player, x, y, z);
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
player.sendMessage(ChatColor.RED + "Error while executing openinv. Unsupported CraftBukkit.");
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the anychest or silentchest is active
|
|
||||||
if (anychest || silentchest) {
|
|
||||||
if (!plugin.getAnySilentChest().activateChest(player, anychest, silentchest, x, y, z)) {
|
|
||||||
if (silentchest && plugin.notifySilentChest()) {
|
|
||||||
player.sendMessage("You are opening a chest silently.");
|
|
||||||
}
|
|
||||||
if (anychest && plugin.notifyAnyChest()) {
|
|
||||||
player.sendMessage("You are opening a blocked chest.");
|
|
||||||
}
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.lishid.openinv.commands;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.lishid.openinv.OpenInv;
|
||||||
|
import com.lishid.openinv.Permissions;
|
||||||
|
|
||||||
|
public class AnyChestCommand implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (command.getName().equalsIgnoreCase("anychest")) {
|
||||||
|
if (!(sender instanceof Player)) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "You can't use this command from the console.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!OpenInv.hasPermission(sender, Permissions.PERM_ANYCHEST)) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "You do not have permission to use any chest.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player = (Player) sender;
|
||||||
|
|
||||||
|
if (args.length > 0) {
|
||||||
|
if (args[0].equalsIgnoreCase("check")) {
|
||||||
|
String status = OpenInv.getPlayerAnyChestStatus(player) ? ChatColor.GREEN + "ON" : ChatColor.RED + "OFF";
|
||||||
|
OpenInv.sendMessage(player, "Any Chest is " + status + ChatColor.RESET + ".");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OpenInv.setPlayerAnyChestStatus(player, !OpenInv.getPlayerAnyChestStatus(player));
|
||||||
|
|
||||||
|
String status = OpenInv.getPlayerAnyChestStatus(player) ? ChatColor.GREEN + "ON" : ChatColor.RED + "OFF";
|
||||||
|
OpenInv.sendMessage(player, "Any Chest is now " + status + ChatColor.RESET + ".");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.commands;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
|
|
||||||
public class AnyChestPluginCommand implements CommandExecutor {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
|
|
||||||
public AnyChestPluginCommand(OpenInv plugin) {
|
|
||||||
this.plugin = plugin;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "You can't use this from the console.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = (Player) sender;
|
|
||||||
|
|
||||||
if (args.length > 0) {
|
|
||||||
if (args[0].equalsIgnoreCase("check")) {
|
|
||||||
if (plugin.getPlayerAnyChestStatus(player))
|
|
||||||
sender.sendMessage("AnyChest is ON.");
|
|
||||||
else
|
|
||||||
sender.sendMessage("AnyChest is OFF.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
plugin.setPlayerAnyChestStatus(player, !plugin.getPlayerAnyChestStatus(player));
|
|
||||||
sender.sendMessage("AnyChest is now " + (plugin.getPlayerAnyChestStatus(player) ? "On" : "Off") + ".");
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
164
src/main/java/com/lishid/openinv/commands/OpenEnderCommand.java
Normal file
164
src/main/java/com/lishid/openinv/commands/OpenEnderCommand.java
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.lishid.openinv.commands;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.lishid.openinv.OpenInv;
|
||||||
|
import com.lishid.openinv.Permissions;
|
||||||
|
import com.lishid.openinv.internal.SpecialEnderChest;
|
||||||
|
import com.lishid.openinv.utils.UUIDUtil;
|
||||||
|
|
||||||
|
public class OpenEnderCommand implements CommandExecutor {
|
||||||
|
private final OpenInv plugin;
|
||||||
|
private final Map<UUID, UUID> openEnderHistory = new ConcurrentHashMap<UUID, UUID>();
|
||||||
|
|
||||||
|
public OpenEnderCommand(OpenInv plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (command.getName().equalsIgnoreCase("openender")) {
|
||||||
|
if (!(sender instanceof Player)) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "You can't use this command from the console.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!OpenInv.hasPermission(sender, Permissions.PERM_ENDERCHEST)) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "You do not have permission to access player ender chests.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.length > 0 && args[0].equalsIgnoreCase("?")) {
|
||||||
|
OpenInv.showHelp((Player) sender);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Player player = (Player) sender;
|
||||||
|
|
||||||
|
// History management
|
||||||
|
UUID history = openEnderHistory.get(player.getUniqueId());
|
||||||
|
if (history == null) {
|
||||||
|
history = player.getUniqueId();
|
||||||
|
openEnderHistory.put(player.getUniqueId(), history);
|
||||||
|
}
|
||||||
|
|
||||||
|
final UUID uuid;
|
||||||
|
|
||||||
|
// Read from history if target is not named
|
||||||
|
if (args.length < 1) {
|
||||||
|
if (history != null) {
|
||||||
|
uuid = history;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sender.sendMessage(ChatColor.RED + "OpenEnder history is empty!");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
uuid = UUIDUtil.getUUIDOf(args[0]);
|
||||||
|
if (uuid == null) {
|
||||||
|
player.sendMessage(ChatColor.RED + "Player not found!");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final UUID playerUUID = player.getUniqueId();
|
||||||
|
|
||||||
|
Player target = Bukkit.getPlayer(uuid);
|
||||||
|
if (target == null) {
|
||||||
|
// Targeted player was not found online, start asynchronous lookup in files
|
||||||
|
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
// Try loading the player's data asynchronously
|
||||||
|
final Player target = OpenInv.getPlayerLoader().loadPlayer(uuid);
|
||||||
|
if (target == null) {
|
||||||
|
player.sendMessage(ChatColor.RED + "Player not found!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Open target's inventory synchronously
|
||||||
|
Bukkit.getScheduler().runTask(plugin, new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Player player = Bukkit.getPlayer(playerUUID);
|
||||||
|
// If sender is no longer online after loading the target, abort!
|
||||||
|
if (player == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
openInventory(player, target);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
openInventory(player, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void openInventory(Player player, Player target) {
|
||||||
|
if (target == null) {
|
||||||
|
player.sendMessage(ChatColor.RED + "Player not found!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (target != player && !OpenInv.hasPermission(player, Permissions.PERM_ENDERCHEST_ALL)) {
|
||||||
|
player.sendMessage(ChatColor.RED + "You do not have permission to access other player's ender chests.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Permissions checks
|
||||||
|
if (!OpenInv.hasPermission(player, Permissions.PERM_OVERRIDE) && OpenInv.hasPermission(target, Permissions.PERM_EXEMPT)) {
|
||||||
|
player.sendMessage(ChatColor.RED + target.getDisplayName() + "'s ender chest is protected!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Crossworld check
|
||||||
|
if ((!OpenInv.hasPermission(player, Permissions.PERM_CROSSWORLD) && !OpenInv.hasPermission(player, Permissions.PERM_OVERRIDE)) && target.getWorld() != player.getWorld()) {
|
||||||
|
player.sendMessage(ChatColor.RED + target.getDisplayName() + " is not in your world!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Record the target
|
||||||
|
openEnderHistory.put(player.getUniqueId(), target.getUniqueId());
|
||||||
|
|
||||||
|
// Create the inventory
|
||||||
|
SpecialEnderChest chest = OpenInv.enderChests.get(target.getUniqueId());
|
||||||
|
if (chest == null) {
|
||||||
|
chest = new SpecialEnderChest(target, target.isOnline());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Open the inventory
|
||||||
|
player.openInventory(chest.getBukkitInventory());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,139 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.commands;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.OfflinePlayer;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.Permissions;
|
|
||||||
import com.lishid.openinv.internal.ISpecialEnderChest;
|
|
||||||
|
|
||||||
public class OpenEnderPluginCommand implements CommandExecutor {
|
|
||||||
private final OpenInv plugin;
|
|
||||||
public static HashMap<Player, String> openEnderHistory = new HashMap<Player, String>();
|
|
||||||
|
|
||||||
public OpenEnderPluginCommand(OpenInv plugin) {
|
|
||||||
this.plugin = plugin;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "You can't use this from the console.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args.length > 0 && args[0].equalsIgnoreCase("?")) {
|
|
||||||
OpenInv.ShowHelp((Player) sender);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Player player = (Player) sender;
|
|
||||||
|
|
||||||
// History management
|
|
||||||
String history = openEnderHistory.get(player);
|
|
||||||
|
|
||||||
if (history == null || history == "") {
|
|
||||||
history = player.getName();
|
|
||||||
openEnderHistory.put(player, history);
|
|
||||||
}
|
|
||||||
|
|
||||||
final String name;
|
|
||||||
|
|
||||||
// Read from history if target is not named
|
|
||||||
if (args.length < 1) {
|
|
||||||
name = history;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
name = args[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
new BukkitRunnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
List<Player> matches = Bukkit.matchPlayer(name);
|
|
||||||
final OfflinePlayer offlinePlayer;
|
|
||||||
if (!matches.isEmpty()) {
|
|
||||||
offlinePlayer = matches.get(0);
|
|
||||||
} else {
|
|
||||||
offlinePlayer = Bukkit.getOfflinePlayer(name);
|
|
||||||
}
|
|
||||||
if (!player.isOnline()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (offlinePlayer == null || !offlinePlayer.hasPlayedBefore() && !offlinePlayer.isOnline()) {
|
|
||||||
player.sendMessage(ChatColor.RED + "Player not found!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
new BukkitRunnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if (!player.isOnline()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
openInventory(player, offlinePlayer);
|
|
||||||
}
|
|
||||||
}.runTask(plugin);
|
|
||||||
}
|
|
||||||
}.runTaskAsynchronously(plugin);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void openInventory(Player player, OfflinePlayer target) {
|
|
||||||
|
|
||||||
Player onlineTarget;
|
|
||||||
boolean online = target.isOnline();
|
|
||||||
|
|
||||||
if (!online) {
|
|
||||||
// Try loading the player's data
|
|
||||||
onlineTarget = plugin.getPlayerLoader().loadPlayer(target);
|
|
||||||
|
|
||||||
if (onlineTarget == null) {
|
|
||||||
player.sendMessage(ChatColor.RED + "Player not found!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
onlineTarget = target.getPlayer();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (!onlineTarget.equals(player) && !OpenInv.hasPermission(player, Permissions.PERM_ENDERCHEST_ALL)) {
|
|
||||||
player.sendMessage(ChatColor.RED + "You do not have permission to access other player's enderchest");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Record the target
|
|
||||||
openEnderHistory.put(player, onlineTarget.getName());
|
|
||||||
|
|
||||||
// Create the inventory
|
|
||||||
ISpecialEnderChest chest = plugin.getOrCreateEnderChestFor(onlineTarget, online);
|
|
||||||
|
|
||||||
// Open the inventory
|
|
||||||
player.openInventory(chest.getBukkitInventory());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
158
src/main/java/com/lishid/openinv/commands/OpenInvCommand.java
Normal file
158
src/main/java/com/lishid/openinv/commands/OpenInvCommand.java
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.lishid.openinv.commands;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.lishid.openinv.OpenInv;
|
||||||
|
import com.lishid.openinv.Permissions;
|
||||||
|
import com.lishid.openinv.internal.SpecialPlayerInventory;
|
||||||
|
import com.lishid.openinv.utils.UUIDUtil;
|
||||||
|
|
||||||
|
public class OpenInvCommand implements CommandExecutor {
|
||||||
|
private final OpenInv plugin;
|
||||||
|
private final Map<UUID, UUID> openInvHistory = new ConcurrentHashMap<UUID, UUID>();
|
||||||
|
|
||||||
|
public OpenInvCommand(OpenInv plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (command.getName().equalsIgnoreCase("openinv")) {
|
||||||
|
if (!(sender instanceof Player)) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "You can't use this command from the console.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!OpenInv.hasPermission(sender, Permissions.PERM_OPENINV)) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "You do not have permission to access player inventories.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.length > 0 && args[0].equalsIgnoreCase("?")) {
|
||||||
|
OpenInv.showHelp((Player) sender);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Player player = (Player) sender;
|
||||||
|
|
||||||
|
// History management
|
||||||
|
UUID history = openInvHistory.get(player.getUniqueId());
|
||||||
|
if (history == null) {
|
||||||
|
history = player.getUniqueId();
|
||||||
|
openInvHistory.put(player.getUniqueId(), history);
|
||||||
|
}
|
||||||
|
|
||||||
|
final UUID uuid;
|
||||||
|
|
||||||
|
// Read from history if target is not named
|
||||||
|
if (args.length < 1) {
|
||||||
|
uuid = history;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
uuid = UUIDUtil.getUUIDOf(args[0]);
|
||||||
|
if (uuid == null) {
|
||||||
|
player.sendMessage(ChatColor.RED + "Player not found!");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final UUID playerUUID = player.getUniqueId();
|
||||||
|
|
||||||
|
Player target = Bukkit.getPlayer(uuid);
|
||||||
|
if (target == null) {
|
||||||
|
// Targeted player was not found online, start asynchronous lookup in files
|
||||||
|
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
// Try loading the player's data asynchronously
|
||||||
|
final Player target = OpenInv.getPlayerLoader().loadPlayer(uuid);
|
||||||
|
if (target == null) {
|
||||||
|
player.sendMessage(ChatColor.RED + "Player not found!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Open target's inventory synchronously
|
||||||
|
Bukkit.getScheduler().runTask(plugin, new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Player player = Bukkit.getPlayer(playerUUID);
|
||||||
|
// If sender is no longer online after loading the target, abort!
|
||||||
|
if (player == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
openInventory(player, target);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
openInventory(player, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void openInventory(Player player, Player target) {
|
||||||
|
if (target == null) {
|
||||||
|
player.sendMessage(ChatColor.RED + "Player not found!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Permissions checks
|
||||||
|
if (!OpenInv.hasPermission(player, Permissions.PERM_OVERRIDE) && OpenInv.hasPermission(target, Permissions.PERM_EXEMPT)) {
|
||||||
|
player.sendMessage(ChatColor.RED + target.getDisplayName() + "'s inventory is protected!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Crossworld check
|
||||||
|
if ((!OpenInv.hasPermission(player, Permissions.PERM_CROSSWORLD) && !OpenInv.hasPermission(player, Permissions.PERM_OVERRIDE)) && target.getWorld() != player.getWorld()) {
|
||||||
|
player.sendMessage(ChatColor.RED + target.getDisplayName() + " is not in your world!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Self-open check
|
||||||
|
if (!OpenInv.hasPermission(player, Permissions.PERM_OPENSELF) && target.equals(player)) {
|
||||||
|
player.sendMessage(ChatColor.RED + "You're not allowed to openinv yourself.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Record the target
|
||||||
|
openInvHistory.put(player.getUniqueId(), target.getUniqueId());
|
||||||
|
|
||||||
|
// Create the inventory
|
||||||
|
SpecialPlayerInventory inv = OpenInv.inventories.get(target.getUniqueId());
|
||||||
|
if (inv == null) {
|
||||||
|
inv = new SpecialPlayerInventory(target, target.isOnline());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Open the inventory
|
||||||
|
player.openInventory(inv.getBukkitInventory());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,152 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.commands;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.OfflinePlayer;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.Permissions;
|
|
||||||
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
|
||||||
|
|
||||||
public class OpenInvPluginCommand implements CommandExecutor {
|
|
||||||
private final OpenInv plugin;
|
|
||||||
public static HashMap<Player, String> openInvHistory = new HashMap<Player, String>();
|
|
||||||
|
|
||||||
public OpenInvPluginCommand(OpenInv plugin) {
|
|
||||||
this.plugin = plugin;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "You can't use this from the console.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args.length > 0 && args[0].equalsIgnoreCase("?")) {
|
|
||||||
OpenInv.ShowHelp((Player) sender);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Player player = (Player) sender;
|
|
||||||
|
|
||||||
// History management
|
|
||||||
String history = openInvHistory.get(player);
|
|
||||||
|
|
||||||
if (history == null || history == "") {
|
|
||||||
history = player.getName();
|
|
||||||
openInvHistory.put(player, history);
|
|
||||||
}
|
|
||||||
|
|
||||||
final String name;
|
|
||||||
|
|
||||||
// Read from history if target is not named
|
|
||||||
if (args.length < 1) {
|
|
||||||
name = history;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
name = args[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
new BukkitRunnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
List<Player> matches = Bukkit.matchPlayer(name);
|
|
||||||
final OfflinePlayer offlinePlayer;
|
|
||||||
if (!matches.isEmpty()) {
|
|
||||||
offlinePlayer = matches.get(0);
|
|
||||||
} else {
|
|
||||||
offlinePlayer = Bukkit.getOfflinePlayer(name);
|
|
||||||
}
|
|
||||||
if (!player.isOnline()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (offlinePlayer == null || !offlinePlayer.hasPlayedBefore() && !offlinePlayer.isOnline()) {
|
|
||||||
player.sendMessage(ChatColor.RED + "Player not found!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
new BukkitRunnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if (!player.isOnline()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
openInventory(player, offlinePlayer);
|
|
||||||
}
|
|
||||||
}.runTask(plugin);
|
|
||||||
}
|
|
||||||
}.runTaskAsynchronously(plugin);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void openInventory(Player player, OfflinePlayer target) {
|
|
||||||
|
|
||||||
|
|
||||||
Player onlineTarget;
|
|
||||||
boolean online = target.isOnline();
|
|
||||||
|
|
||||||
if (!online) {
|
|
||||||
// Try loading the player's data
|
|
||||||
onlineTarget = plugin.getPlayerLoader().loadPlayer(target);
|
|
||||||
|
|
||||||
if (onlineTarget == null) {
|
|
||||||
player.sendMessage(ChatColor.RED + "Player not found!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
onlineTarget = target.getPlayer();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Permissions checks
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_OVERRIDE) && OpenInv.hasPermission(onlineTarget, Permissions.PERM_EXEMPT)) {
|
|
||||||
player.sendMessage(ChatColor.RED + onlineTarget.getDisplayName() + "'s inventory is protected!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Crosswork check
|
|
||||||
if ((!OpenInv.hasPermission(player, Permissions.PERM_CROSSWORLD) && !OpenInv.hasPermission(player, Permissions.PERM_OVERRIDE)) && onlineTarget.getWorld() != player.getWorld()) {
|
|
||||||
player.sendMessage(ChatColor.RED + onlineTarget.getDisplayName() + " is not in your world!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Self-open check
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_OPENSELF) && onlineTarget.equals(player)) {
|
|
||||||
player.sendMessage(ChatColor.RED + "You're not allowed to openinv yourself.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Record the target
|
|
||||||
openInvHistory.put(player, onlineTarget.getName());
|
|
||||||
|
|
||||||
// Create the inventory
|
|
||||||
ISpecialPlayerInventory inv = plugin.getOrCreateInventoryFor(onlineTarget, online);
|
|
||||||
|
|
||||||
// Open the inventory
|
|
||||||
player.openInventory(inv.getBukkitInventory());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
package com.lishid.openinv.commands;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.lishid.openinv.OpenInv;
|
||||||
|
import com.lishid.openinv.Permissions;
|
||||||
|
|
||||||
|
public class SearchEnderCommand implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (command.getName().equalsIgnoreCase("searchender")) {
|
||||||
|
if (sender instanceof Player) {
|
||||||
|
if (!OpenInv.hasPermission(sender, Permissions.PERM_SEARCH)) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "You do not have permission to search player ender chests.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Material material = null;
|
||||||
|
int count = 1;
|
||||||
|
|
||||||
|
if (args.length >= 1) {
|
||||||
|
String[] gData;
|
||||||
|
gData = args[0].split(":");
|
||||||
|
material = Material.matchMaterial(gData[0]);
|
||||||
|
}
|
||||||
|
if (args.length >= 2) {
|
||||||
|
try {
|
||||||
|
count = Integer.parseInt(args[1]);
|
||||||
|
}
|
||||||
|
catch (NumberFormatException ex) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "'" + args[1] + "' is not a number!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (material == null) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "Unknown item");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
for (Player onlinePlayer : Bukkit.getServer().getOnlinePlayers()) {
|
||||||
|
if (onlinePlayer.getEnderChest().contains(material, count)) {
|
||||||
|
sb.append(onlinePlayer.getName());
|
||||||
|
sb.append(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String playerList = sb.toString();
|
||||||
|
sender.sendMessage("Players with the item " + ChatColor.GRAY + material.toString() + ChatColor.RESET + " in their ender chest: " + playerList);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.lishid.openinv.commands;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.lishid.openinv.OpenInv;
|
||||||
|
import com.lishid.openinv.Permissions;
|
||||||
|
|
||||||
|
public class SearchInvCommand implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (command.getName().equalsIgnoreCase("searchinv")) {
|
||||||
|
if (sender instanceof Player) {
|
||||||
|
if (!OpenInv.hasPermission(sender, Permissions.PERM_SEARCH)) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "You do not have permission to search player inventories.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Material material = null;
|
||||||
|
int count = 1;
|
||||||
|
|
||||||
|
if (args.length >= 1) {
|
||||||
|
String[] gData;
|
||||||
|
gData = args[0].split(":");
|
||||||
|
material = Material.matchMaterial(gData[0]);
|
||||||
|
}
|
||||||
|
if (args.length >= 2) {
|
||||||
|
try {
|
||||||
|
count = Integer.parseInt(args[1]);
|
||||||
|
}
|
||||||
|
catch (NumberFormatException ex) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "'" + args[1] + "' is not a number!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (material == null) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "Unknown item");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
for (Player onlinePlayer : Bukkit.getServer().getOnlinePlayers()) {
|
||||||
|
if (onlinePlayer.getInventory().contains(material, count)) {
|
||||||
|
sb.append(onlinePlayer.getName());
|
||||||
|
sb.append(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String playerList = sb.toString();
|
||||||
|
sender.sendMessage("Players with the item " + ChatColor.GRAY + material.toString() + ChatColor.RESET + " in their inventory: " + playerList);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.commands;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
public class SearchInvPluginCommand implements CommandExecutor {
|
|
||||||
public SearchInvPluginCommand() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
String PlayerList = "";
|
|
||||||
|
|
||||||
Material material = null;
|
|
||||||
int count = 1;
|
|
||||||
|
|
||||||
if (args.length >= 1) {
|
|
||||||
String[] gData = null;
|
|
||||||
gData = args[0].split(":");
|
|
||||||
material = Material.matchMaterial(gData[0]);
|
|
||||||
}
|
|
||||||
if (args.length >= 2) {
|
|
||||||
try {
|
|
||||||
count = Integer.parseInt(args[1]);
|
|
||||||
}
|
|
||||||
catch (NumberFormatException ex) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "'" + args[1] + "' is not a number!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (material == null) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "Unknown item");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Player templayer : Bukkit.getServer().getOnlinePlayers()) {
|
|
||||||
if (templayer.getInventory().contains(material, count)) {
|
|
||||||
PlayerList += templayer.getName() + " ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sender.sendMessage("Players with the item " + material.toString() + ": " + PlayerList);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.lishid.openinv.commands;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.lishid.openinv.OpenInv;
|
||||||
|
import com.lishid.openinv.Permissions;
|
||||||
|
|
||||||
|
public class SilentChestCommand implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (command.getName().equalsIgnoreCase("silentchest")) {
|
||||||
|
if (!(sender instanceof Player)) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "You can't use this command from the console.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!OpenInv.hasPermission(sender, Permissions.PERM_SILENT)) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "You do not have permission to use silent chest.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player = (Player) sender;
|
||||||
|
|
||||||
|
if (args.length > 0) {
|
||||||
|
if (args[0].equalsIgnoreCase("check")) {
|
||||||
|
String status = OpenInv.getPlayerSilentChestStatus(player) ? ChatColor.GREEN + "ON" : ChatColor.RED + "OFF";
|
||||||
|
OpenInv.sendMessage(player, "Silent Chest is " + status + ChatColor.RESET + ".");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OpenInv.setPlayerSilentChestStatus(player, !OpenInv.getPlayerSilentChestStatus(player));
|
||||||
|
|
||||||
|
String status = OpenInv.getPlayerSilentChestStatus(player) ? ChatColor.GREEN + "ON" : ChatColor.RED + "OFF";
|
||||||
|
OpenInv.sendMessage(player, "Silent Chest is now " + status + ChatColor.RESET + ".");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.commands;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
|
|
||||||
public class SilentChestPluginCommand implements CommandExecutor {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
|
|
||||||
public SilentChestPluginCommand(OpenInv plugin) {
|
|
||||||
this.plugin = plugin;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "You can't use this from the console.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = (Player) sender;
|
|
||||||
|
|
||||||
if (args.length > 0) {
|
|
||||||
if (args[0].equalsIgnoreCase("check")) {
|
|
||||||
if (plugin.getPlayerSilentChestStatus(player))
|
|
||||||
sender.sendMessage("SilentChest is ON.");
|
|
||||||
else
|
|
||||||
sender.sendMessage("SilentChest is OFF.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
plugin.setPlayerSilentChestStatus(player, !plugin.getPlayerSilentChestStatus(player));
|
|
||||||
sender.sendMessage("SilentChest is now " + (plugin.getPlayerSilentChestStatus(player) ? "On" : "Off") + ".");
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.lishid.openinv.commands;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.lishid.openinv.OpenInv;
|
||||||
|
import com.lishid.openinv.Permissions;
|
||||||
|
|
||||||
|
public class ToggleOpenInvCommand implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (command.getName().equalsIgnoreCase("toggleopeninv")) {
|
||||||
|
if (!(sender instanceof Player)) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "You can't use this command from the console.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!OpenInv.hasPermission(sender, Permissions.PERM_OPENINV)) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "You do not have permission to access player inventories.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player = (Player) sender;
|
||||||
|
|
||||||
|
if (args.length > 0) {
|
||||||
|
if (args[0].equalsIgnoreCase("check")) {
|
||||||
|
String status = OpenInv.getPlayerItemOpenInvStatus(player) ? ChatColor.GREEN + "ON" : ChatColor.RED + "OFF";
|
||||||
|
OpenInv.sendMessage(player, "OpenInv with " + ChatColor.GRAY + OpenInv.getOpenInvItem() + ChatColor.RESET + status + ChatColor.RESET + ".");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OpenInv.setPlayerItemOpenInvStatus(player, !OpenInv.getPlayerItemOpenInvStatus(player));
|
||||||
|
|
||||||
|
String status = OpenInv.getPlayerItemOpenInvStatus(player) ? ChatColor.GREEN + "ON" : ChatColor.RED + "OFF";
|
||||||
|
OpenInv.sendMessage(player, "OpenInv with " + ChatColor.GRAY + OpenInv.getOpenInvItem() + ChatColor.RESET + " is now " + status + ChatColor.RESET + ".");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
141
src/main/java/com/lishid/openinv/internal/AnySilentChest.java
Normal file
141
src/main/java/com/lishid/openinv/internal/AnySilentChest.java
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.lishid.openinv.internal;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.lishid.openinv.OpenInv;
|
||||||
|
|
||||||
|
// Volatile
|
||||||
|
import net.minecraft.server.v1_8_R3.*;
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R3.entity.*;
|
||||||
|
|
||||||
|
public class AnySilentChest {
|
||||||
|
public boolean isAnyChestNeeded(Player p, int x, int y, int z) {
|
||||||
|
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
|
||||||
|
BlockPosition position = new BlockPosition(x, y, z);
|
||||||
|
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
||||||
|
World world = player.world;
|
||||||
|
BlockChest chest = (BlockChest) (((BlockChest) world.getType(position).getBlock()).b == 1 ?
|
||||||
|
Block.getByName("trapped_chest") : Block.getByName("chest"));
|
||||||
|
|
||||||
|
// If block on top
|
||||||
|
if (topBlocking(world, position)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If block next to chest is chest and has a block on top
|
||||||
|
for (EnumDirection direction : EnumDirectionList.HORIZONTAL) {
|
||||||
|
BlockPosition sidePosition = position.shift(direction);
|
||||||
|
Block var8 = world.getType(sidePosition).getBlock();
|
||||||
|
if (var8 == chest) {
|
||||||
|
if (this.topBlocking(world, sidePosition)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
private boolean topBlocking(World world, BlockPosition position) {
|
||||||
|
return this.blockOnTop(world, position) || this.ocelotOnTop(world, position);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean blockOnTop(World world, BlockPosition position) {
|
||||||
|
return world.getType(position.up()).getBlock().isOccluding();
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean ocelotOnTop(World world, BlockPosition position) {
|
||||||
|
Iterator var3 = world.a(EntityOcelot.class,
|
||||||
|
new AxisAlignedBB((double) position.getX(), (double) (position.getY() + 1),
|
||||||
|
(double) position.getZ(), (double) (position.getX() + 1),
|
||||||
|
(double) (position.getY() + 2), (double) (position.getZ() + 1))).iterator();
|
||||||
|
|
||||||
|
EntityOcelot var5;
|
||||||
|
do {
|
||||||
|
if (!var3.hasNext()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Entity var4 = (Entity) var3.next();
|
||||||
|
var5 = (EntityOcelot) var4;
|
||||||
|
} while (!var5.isSitting());
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean activateChest(Player p, boolean anyChest, boolean silentChest, int x, int y, int z) {
|
||||||
|
BlockPosition position = new BlockPosition(x, y, z);
|
||||||
|
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
||||||
|
World world = player.world;
|
||||||
|
if (world.isClientSide) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
BlockChest chest = (BlockChest) (((BlockChest) world.getType(position).getBlock()).b == 1 ?
|
||||||
|
Block.getByName("trapped_chest") : Block.getByName("chest"));
|
||||||
|
|
||||||
|
TileEntity tileEntity = world.getTileEntity(position);
|
||||||
|
if (!(tileEntity instanceof TileEntityChest)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ITileInventory tileInventory = (ITileInventory) tileEntity;
|
||||||
|
if (!anyChest && this.topBlocking(world, position)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (EnumDirection direction : EnumDirectionList.HORIZONTAL) {
|
||||||
|
BlockPosition side = position.shift(direction);
|
||||||
|
Block block = world.getType(side).getBlock();
|
||||||
|
if (block == chest) {
|
||||||
|
if (!anyChest && this.topBlocking(world, side)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
TileEntity sideTileEntity = world.getTileEntity(side);
|
||||||
|
if (sideTileEntity instanceof TileEntityChest) {
|
||||||
|
if (direction != EnumDirection.WEST && direction != EnumDirection.NORTH) {
|
||||||
|
tileInventory = new InventoryLargeChest("container.chestDouble", tileInventory, (TileEntityChest) sideTileEntity);
|
||||||
|
} else {
|
||||||
|
tileInventory = new InventoryLargeChest("container.chestDouble", (TileEntityChest) sideTileEntity, tileInventory);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean returnValue = true;
|
||||||
|
if (silentChest) {
|
||||||
|
tileInventory = new SilentInventory(tileInventory);
|
||||||
|
if (OpenInv.notifySilentChest()) {
|
||||||
|
OpenInv.sendMessage(p, "You are opening a chest silently.");
|
||||||
|
}
|
||||||
|
returnValue = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.openContainer(tileInventory);
|
||||||
|
|
||||||
|
if (anyChest && OpenInv.notifyAnyChest()) {
|
||||||
|
OpenInv.sendMessage(p, "You are opening a blocked chest.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package com.lishid.openinv.internal;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import com.google.common.collect.Iterators;
|
||||||
|
|
||||||
|
import net.minecraft.server.v1_8_R3.EnumDirection;
|
||||||
|
import net.minecraft.server.v1_8_R3.EnumDirection.EnumDirectionLimit;
|
||||||
|
|
||||||
|
public enum EnumDirectionList implements Iterable<EnumDirection> {
|
||||||
|
HORIZONTAL(EnumDirectionLimit.HORIZONTAL),
|
||||||
|
VERTICAL(EnumDirectionLimit.VERTICAL);
|
||||||
|
|
||||||
|
private final EnumDirectionLimit list;
|
||||||
|
|
||||||
|
private EnumDirectionList(EnumDirectionLimit list) {
|
||||||
|
this.list = list;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<EnumDirection> iterator() {
|
||||||
|
return Iterators.forArray(list.a());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
public interface IAnySilentChest {
|
|
||||||
public boolean isAnyChestNeeded(Player player, int x, int y, int z);
|
|
||||||
|
|
||||||
public boolean activateChest(Player player, boolean anychest, boolean silentchest, int x, int y, int z);
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
public interface IInventoryAccess {
|
|
||||||
public boolean check(Inventory inventory, HumanEntity player);
|
|
||||||
}
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
public interface ISpecialEnderChest {
|
|
||||||
|
|
||||||
public Inventory getBukkitInventory();
|
|
||||||
|
|
||||||
public boolean inventoryRemovalCheck(boolean save);
|
|
||||||
|
|
||||||
public void setPlayerOnline(Player player);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the Player associated with this ISpecialEnderChest offline.
|
|
||||||
*
|
|
||||||
* @return true if the ISpecialEnderChest is eligible for removal
|
|
||||||
*/
|
|
||||||
public boolean setPlayerOffline();
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
public interface ISpecialPlayerInventory {
|
|
||||||
|
|
||||||
public Inventory getBukkitInventory();
|
|
||||||
|
|
||||||
public boolean inventoryRemovalCheck(boolean save);
|
|
||||||
|
|
||||||
public void setPlayerOnline(Player player);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the Player associated with this ISpecialPlayerInventory offline.
|
|
||||||
*
|
|
||||||
* @return true if the ISpecialPlayerInventory is eligible for removal
|
|
||||||
*/
|
|
||||||
public boolean setPlayerOffline();
|
|
||||||
}
|
|
||||||
@@ -1,118 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal;
|
|
||||||
|
|
||||||
import org.bukkit.Server;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
|
|
||||||
public class InternalAccessor {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
|
|
||||||
private String version;
|
|
||||||
|
|
||||||
public InternalAccessor(OpenInv plugin) {
|
|
||||||
this.plugin = plugin;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if the current server version is supported, and, if it is, prepare to load version-specific code.
|
|
||||||
*
|
|
||||||
* @param server the Server
|
|
||||||
*
|
|
||||||
* @return true if supported
|
|
||||||
*/
|
|
||||||
public boolean initialize(Server server) {
|
|
||||||
String packageName = server.getClass().getPackage().getName();
|
|
||||||
version = packageName.substring(packageName.lastIndexOf('.') + 1);
|
|
||||||
|
|
||||||
try {
|
|
||||||
Class.forName("com.lishid.openinv.internal." + version + ".AnySilentChest");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void printErrorMessage() {
|
|
||||||
plugin.getLogger().warning("OpenInv encountered an error with the CraftBukkit version \"" + version + "\". Please look for an updated version of OpenInv.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public PlayerDataManager newPlayerDataManager() {
|
|
||||||
return (PlayerDataManager) createObject(PlayerDataManager.class, "PlayerDataManager");
|
|
||||||
}
|
|
||||||
|
|
||||||
public IInventoryAccess newInventoryAccess() {
|
|
||||||
return (IInventoryAccess) createObject(IInventoryAccess.class, "InventoryAccess");
|
|
||||||
}
|
|
||||||
|
|
||||||
public IAnySilentChest newAnySilentChest() {
|
|
||||||
return (IAnySilentChest) createObject(IAnySilentChest.class, "AnySilentChest");
|
|
||||||
}
|
|
||||||
|
|
||||||
public ISpecialPlayerInventory newSpecialPlayerInventory(Player player, boolean offline) {
|
|
||||||
try {
|
|
||||||
Class<?> internalClass = Class.forName("com.lishid.openinv.internal." + version + ".SpecialPlayerInventory");
|
|
||||||
if (ISpecialPlayerInventory.class.isAssignableFrom(internalClass)) {
|
|
||||||
return (ISpecialPlayerInventory) internalClass
|
|
||||||
.getConstructor(OpenInv.class, Player.class, Boolean.class)
|
|
||||||
.newInstance(this.plugin, player, offline);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
printErrorMessage();
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ISpecialEnderChest newSpecialEnderChest(Player player, boolean offline) {
|
|
||||||
try {
|
|
||||||
Class<?> internalClass = Class.forName("com.lishid.openinv.internal." + version + ".SpecialEnderChest");
|
|
||||||
if (ISpecialEnderChest.class.isAssignableFrom(internalClass)) {
|
|
||||||
return (ISpecialEnderChest) internalClass
|
|
||||||
.getConstructor(OpenInv.class, Player.class, Boolean.class)
|
|
||||||
.newInstance(this.plugin, player, offline);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
printErrorMessage();
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Object createObject(Class<? extends Object> assignableClass, String className) {
|
|
||||||
try {
|
|
||||||
Class<?> internalClass = Class.forName("com.lishid.openinv.internal." + version + "." + className);
|
|
||||||
if (assignableClass.isAssignableFrom(internalClass)) {
|
|
||||||
return internalClass.getConstructor().newInstance();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
printErrorMessage();
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_8_R2;
|
package com.lishid.openinv.internal;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
@@ -23,15 +23,13 @@ import org.bukkit.inventory.Inventory;
|
|||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
import com.lishid.openinv.OpenInv;
|
||||||
import com.lishid.openinv.Permissions;
|
import com.lishid.openinv.Permissions;
|
||||||
import com.lishid.openinv.internal.IInventoryAccess;
|
|
||||||
|
|
||||||
// Volatile
|
// Volatile
|
||||||
import net.minecraft.server.v1_8_R2.IInventory;
|
import net.minecraft.server.v1_8_R3.*;
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_8_R2.inventory.CraftInventory;
|
import org.bukkit.craftbukkit.v1_8_R3.inventory.*;
|
||||||
|
|
||||||
public class InventoryAccess implements IInventoryAccess {
|
public class InventoryAccess {
|
||||||
@Override
|
|
||||||
public boolean check(Inventory inventory, HumanEntity player) {
|
public boolean check(Inventory inventory, HumanEntity player) {
|
||||||
IInventory inv = grabInventory(inventory);
|
IInventory inv = grabInventory(inventory);
|
||||||
|
|
||||||
@@ -55,7 +53,7 @@ public class InventoryAccess implements IInventoryAccess {
|
|||||||
return ((CraftInventory) inventory).getInventory();
|
return ((CraftInventory) inventory).getInventory();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Use reflection to find the iiventory
|
// Use reflection to find the inventory
|
||||||
Class<? extends Inventory> clazz = inventory.getClass();
|
Class<? extends Inventory> clazz = inventory.getClass();
|
||||||
IInventory result = null;
|
IInventory result = null;
|
||||||
for(Field f : clazz.getDeclaredFields()) {
|
for(Field f : clazz.getDeclaredFields()) {
|
||||||
@@ -65,7 +63,7 @@ public class InventoryAccess implements IInventoryAccess {
|
|||||||
result = (IInventory) f.get(inventory);
|
result = (IInventory) f.get(inventory);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
e.printStackTrace();
|
OpenInv.log(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -16,18 +16,45 @@
|
|||||||
|
|
||||||
package com.lishid.openinv.internal;
|
package com.lishid.openinv.internal;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
public abstract class PlayerDataManager {
|
import com.lishid.openinv.OpenInv;
|
||||||
public final Player loadPlayer(OfflinePlayer offline) {
|
import com.mojang.authlib.GameProfile;
|
||||||
if (offline.isOnline()) {
|
|
||||||
return offline.getPlayer();
|
// Volatile
|
||||||
|
import net.minecraft.server.v1_8_R3.*;
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R3.*;
|
||||||
|
|
||||||
|
public class PlayerDataManager {
|
||||||
|
public Player loadPlayer(UUID uuid) {
|
||||||
|
try {
|
||||||
|
OfflinePlayer player = Bukkit.getOfflinePlayer(uuid);
|
||||||
|
if (player == null || !player.hasPlayedBefore()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
GameProfile profile = new GameProfile(uuid, player.getName());
|
||||||
|
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
|
||||||
|
// Create an entity to load the player data
|
||||||
|
EntityPlayer entity = new EntityPlayer(server, server.getWorldServer(0), profile, new PlayerInteractManager(server.getWorldServer(0)));
|
||||||
|
|
||||||
|
// Get the bukkit entity
|
||||||
|
Player target = entity.getBukkitEntity();
|
||||||
|
if (target != null) {
|
||||||
|
// Load data
|
||||||
|
target.loadData();
|
||||||
|
// Return the entity
|
||||||
|
return target;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return this.loadOfflinePlayer(offline);
|
catch (Exception e) {
|
||||||
|
OpenInv.log(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract Player loadOfflinePlayer(OfflinePlayer offline);
|
|
||||||
|
|
||||||
public abstract String getPlayerDataID(OfflinePlayer player);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,21 +14,19 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_8_R3;
|
package com.lishid.openinv.internal;
|
||||||
|
|
||||||
// Volatile
|
// Volatile
|
||||||
import net.minecraft.server.v1_8_R3.ContainerChest;
|
import net.minecraft.server.v1_8_R3.*;
|
||||||
import net.minecraft.server.v1_8_R3.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_8_R3.IInventory;
|
|
||||||
|
|
||||||
public class SilentContainerChest extends ContainerChest {
|
public class SilentContainerChest extends ContainerChest {
|
||||||
public IInventory inv;
|
public IInventory inv;
|
||||||
|
|
||||||
public SilentContainerChest(IInventory i1, IInventory i2, EntityHuman e1) {
|
public SilentContainerChest(IInventory i1, IInventory i2, EntityHuman human) {
|
||||||
super(i1, i2, e1);
|
super(i1, i2, human);
|
||||||
inv = i2;
|
inv = i2;
|
||||||
// close signal
|
// Close signal
|
||||||
inv.closeContainer(e1);
|
inv.closeContainer(human);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
164
src/main/java/com/lishid/openinv/internal/SilentInventory.java
Normal file
164
src/main/java/com/lishid/openinv/internal/SilentInventory.java
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
package com.lishid.openinv.internal;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftHumanEntity;
|
||||||
|
import org.bukkit.entity.HumanEntity;
|
||||||
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
|
||||||
|
// Volatile
|
||||||
|
import net.minecraft.server.v1_8_R3.*;
|
||||||
|
|
||||||
|
public class SilentInventory implements ITileInventory {
|
||||||
|
public ITileInventory inv;
|
||||||
|
|
||||||
|
public SilentInventory(ITileInventory inv) {
|
||||||
|
this.inv = inv;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean r_() {
|
||||||
|
return inv.r_();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void a(ChestLock chestLock) {
|
||||||
|
inv.a(chestLock);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ChestLock i() {
|
||||||
|
return inv.i();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSize() {
|
||||||
|
return inv.getSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack getItem(int i) {
|
||||||
|
return inv.getItem(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack splitStack(int i, int i1) {
|
||||||
|
return inv.splitStack(i, i1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack splitWithoutUpdate(int i) {
|
||||||
|
return inv.splitWithoutUpdate(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setItem(int i, ItemStack itemStack) {
|
||||||
|
inv.setItem(i, itemStack);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxStackSize() {
|
||||||
|
return inv.getMaxStackSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
inv.update();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean a(EntityHuman entityHuman) {
|
||||||
|
return inv.a(entityHuman);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void startOpen(EntityHuman entityHuman) {
|
||||||
|
// Don't do anything
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void closeContainer(EntityHuman entityHuman) {
|
||||||
|
// Don't do anything
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean b(int i, ItemStack itemStack) {
|
||||||
|
return inv.b(i, itemStack);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getProperty(int i) {
|
||||||
|
return inv.getProperty(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void b(int i, int i1) {
|
||||||
|
inv.b(i, i1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int g() {
|
||||||
|
return inv.g();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void l() {
|
||||||
|
inv.l();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack[] getContents() {
|
||||||
|
return inv.getContents();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onOpen(CraftHumanEntity craftHumanEntity) {
|
||||||
|
inv.onOpen(craftHumanEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClose(CraftHumanEntity craftHumanEntity) {
|
||||||
|
inv.onClose(craftHumanEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<HumanEntity> getViewers() {
|
||||||
|
return inv.getViewers();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InventoryHolder getOwner() {
|
||||||
|
return inv.getOwner();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMaxStackSize(int i) {
|
||||||
|
inv.setMaxStackSize(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return inv.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasCustomName() {
|
||||||
|
return inv.hasCustomName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IChatBaseComponent getScoreboardDisplayName() {
|
||||||
|
return inv.getScoreboardDisplayName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Container createContainer(PlayerInventory playerInventory, EntityHuman entityHuman) {
|
||||||
|
// Don't let the chest itself create the container.
|
||||||
|
return new ContainerChest(playerInventory, this, entityHuman);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getContainerName() {
|
||||||
|
return inv.getContainerName();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.lishid.openinv.internal;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
|
||||||
|
import com.lishid.openinv.OpenInv;
|
||||||
|
|
||||||
|
// Volatile
|
||||||
|
import net.minecraft.server.v1_8_R3.*;
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R3.entity.*;
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R3.inventory.*;
|
||||||
|
|
||||||
|
public class SpecialEnderChest extends InventorySubcontainer {
|
||||||
|
private final CraftInventory inventory = new CraftInventory(this);
|
||||||
|
private final InventoryEnderChest enderChest;
|
||||||
|
private final CraftPlayer owner;
|
||||||
|
private boolean playerOnline;
|
||||||
|
|
||||||
|
public SpecialEnderChest(Player p, boolean online) {
|
||||||
|
this(p, ((CraftPlayer) p).getHandle().getEnderChest(), online);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SpecialEnderChest(Player p, InventoryEnderChest enderChest, boolean online) {
|
||||||
|
super(enderChest.getName(), enderChest.hasCustomName(), enderChest.getSize());
|
||||||
|
this.owner = (CraftPlayer) p;
|
||||||
|
this.enderChest = enderChest;
|
||||||
|
this.items = this.enderChest.getContents();
|
||||||
|
this.playerOnline = online;
|
||||||
|
OpenInv.enderChests.put(owner.getUniqueId(), this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void saveOnExit() {
|
||||||
|
if (transaction.isEmpty() && !playerOnline) {
|
||||||
|
owner.saveData();
|
||||||
|
OpenInv.enderChests.remove(owner.getUniqueId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void linkInventory(InventoryEnderChest inventory) {
|
||||||
|
inventory.items = this.items;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Inventory getBukkitInventory() {
|
||||||
|
return inventory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void playerOnline(Player p) {
|
||||||
|
if (!playerOnline) {
|
||||||
|
linkInventory(((CraftPlayer) p).getHandle().getEnderChest());
|
||||||
|
p.saveData();
|
||||||
|
playerOnline = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void playerOffline() {
|
||||||
|
playerOnline = false;
|
||||||
|
owner.loadData();
|
||||||
|
linkInventory(owner.getHandle().getEnderChest());
|
||||||
|
saveOnExit();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClose(CraftHumanEntity who) {
|
||||||
|
super.onClose(who);
|
||||||
|
saveOnExit();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InventoryHolder getOwner() {
|
||||||
|
return this.owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
super.update();
|
||||||
|
enderChest.update();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,75 +14,70 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_8_R2;
|
package com.lishid.openinv.internal;
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
import com.lishid.openinv.OpenInv;
|
||||||
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
|
||||||
|
|
||||||
// Volatile
|
// Volatile
|
||||||
import net.minecraft.server.v1_8_R2.EntityHuman;
|
import net.minecraft.server.v1_8_R3.*;
|
||||||
import net.minecraft.server.v1_8_R2.ItemStack;
|
|
||||||
import net.minecraft.server.v1_8_R2.PlayerInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_8_R2.entity.CraftHumanEntity;
|
import org.bukkit.craftbukkit.v1_8_R3.entity.*;
|
||||||
import org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer;
|
import org.bukkit.craftbukkit.v1_8_R3.inventory.*;
|
||||||
import org.bukkit.craftbukkit.v1_8_R2.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
|
public class SpecialPlayerInventory extends PlayerInventory {
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final ItemStack[] extra = new ItemStack[5];
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
private final CraftInventory inventory = new CraftInventory(this);
|
||||||
private CraftPlayer owner;
|
private final ItemStack[] extra = new ItemStack[5];
|
||||||
private boolean playerOnline = false;
|
private final CraftPlayer owner;
|
||||||
|
private boolean playerOnline;
|
||||||
|
|
||||||
public SpecialPlayerInventory(OpenInv plugin, Player p, Boolean online) {
|
public SpecialPlayerInventory(Player p, boolean online) {
|
||||||
super(((CraftPlayer) p).getHandle());
|
super(((CraftPlayer) p).getHandle());
|
||||||
this.plugin = plugin;
|
this.owner = (CraftPlayer) p;
|
||||||
this.owner = ((CraftPlayer) p);
|
|
||||||
this.playerOnline = online;
|
|
||||||
this.items = player.inventory.items;
|
this.items = player.inventory.items;
|
||||||
this.armor = player.inventory.armor;
|
this.armor = player.inventory.armor;
|
||||||
|
this.playerOnline = online;
|
||||||
|
OpenInv.inventories.put(owner.getUniqueId(), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
public Inventory getBukkitInventory() {
|
||||||
return inventory;
|
return inventory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private void saveOnExit() {
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
if (transaction.isEmpty() && !playerOnline) {
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
owner.saveData();
|
||||||
|
OpenInv.inventories.remove(owner.getUniqueId());
|
||||||
}
|
}
|
||||||
return offline;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private void linkInventory(PlayerInventory inventory) {
|
||||||
public void setPlayerOnline(Player player) {
|
inventory.items = this.items;
|
||||||
|
inventory.armor = this.armor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void playerOnline(Player player) {
|
||||||
if (!playerOnline) {
|
if (!playerOnline) {
|
||||||
owner = (CraftPlayer) player;
|
CraftPlayer p = (CraftPlayer) player;
|
||||||
this.player = owner.getHandle();
|
linkInventory(p.getHandle().inventory);
|
||||||
this.player.inventory.items = this.items;
|
p.saveData();
|
||||||
this.player.inventory.armor = this.armor;
|
|
||||||
playerOnline = true;
|
playerOnline = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public void playerOffline() {
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
playerOnline = false;
|
||||||
return this.inventoryRemovalCheck(false);
|
owner.loadData();
|
||||||
|
linkInventory(owner.getHandle().inventory);
|
||||||
|
saveOnExit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClose(CraftHumanEntity who) {
|
public void onClose(CraftHumanEntity who) {
|
||||||
super.onClose(who);
|
super.onClose(who);
|
||||||
this.inventoryRemovalCheck(true);
|
this.saveOnExit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -105,16 +100,14 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
if (i >= is.length) {
|
if (i >= is.length) {
|
||||||
i -= is.length;
|
i -= is.length;
|
||||||
is = this.armor;
|
is = this.armor;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
i = getReversedItemSlotNum(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i >= is.length) {
|
if (i >= is.length) {
|
||||||
i -= is.length;
|
i -= is.length;
|
||||||
is = this.extra;
|
is = this.extra;
|
||||||
}
|
} else if (is == this.armor) {
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
i = getReversedArmorSlotNum(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,16 +121,14 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
if (i >= is.length) {
|
if (i >= is.length) {
|
||||||
i -= is.length;
|
i -= is.length;
|
||||||
is = this.armor;
|
is = this.armor;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
i = getReversedItemSlotNum(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i >= is.length) {
|
if (i >= is.length) {
|
||||||
i -= is.length;
|
i -= is.length;
|
||||||
is = this.extra;
|
is = this.extra;
|
||||||
}
|
} else if (is == this.armor) {
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
i = getReversedArmorSlotNum(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,8 +139,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
itemstack = is[i];
|
itemstack = is[i];
|
||||||
is[i] = null;
|
is[i] = null;
|
||||||
return itemstack;
|
return itemstack;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
itemstack = is[i].a(j);
|
itemstack = is[i].a(j);
|
||||||
if (is[i].count == 0) {
|
if (is[i].count == 0) {
|
||||||
is[i] = null;
|
is[i] = null;
|
||||||
@@ -157,8 +147,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
|
|
||||||
return itemstack;
|
return itemstack;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -170,16 +159,14 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
if (i >= is.length) {
|
if (i >= is.length) {
|
||||||
i -= is.length;
|
i -= is.length;
|
||||||
is = this.armor;
|
is = this.armor;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
i = getReversedItemSlotNum(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i >= is.length) {
|
if (i >= is.length) {
|
||||||
i -= is.length;
|
i -= is.length;
|
||||||
is = this.extra;
|
is = this.extra;
|
||||||
}
|
} else if (is == this.armor) {
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
i = getReversedArmorSlotNum(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,39 +175,36 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
|
|
||||||
is[i] = null;
|
is[i] = null;
|
||||||
return itemstack;
|
return itemstack;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setItem(int i, ItemStack itemstack) {
|
public void setItem(int i, ItemStack itemStack) {
|
||||||
ItemStack[] is = this.items;
|
ItemStack[] is = this.items;
|
||||||
|
|
||||||
if (i >= is.length) {
|
if (i >= is.length) {
|
||||||
i -= is.length;
|
i -= is.length;
|
||||||
is = this.armor;
|
is = this.armor;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
i = getReversedItemSlotNum(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i >= is.length) {
|
if (i >= is.length) {
|
||||||
i -= is.length;
|
i -= is.length;
|
||||||
is = this.extra;
|
is = this.extra;
|
||||||
}
|
} else if (is == this.armor) {
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
i = getReversedArmorSlotNum(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Effects
|
// Effects
|
||||||
if (is == this.extra) {
|
if (is == this.extra) {
|
||||||
owner.getHandle().drop(itemstack, true);
|
owner.getHandle().drop(itemStack, true);
|
||||||
itemstack = null;
|
itemStack = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
is[i] = itemstack;
|
is[i] = itemStack;
|
||||||
|
|
||||||
owner.getHandle().defaultContainer.b();
|
owner.getHandle().defaultContainer.b();
|
||||||
}
|
}
|
||||||
@@ -245,11 +229,13 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasCustomName() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
if (player.getName().length() > 16) {
|
|
||||||
return player.getName().substring(0, 16);
|
|
||||||
}
|
|
||||||
return player.getName();
|
return player.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -257,4 +243,10 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
public boolean a(EntityHuman entityhuman) {
|
public boolean a(EntityHuman entityhuman) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
super.update();
|
||||||
|
player.inventory.update();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,120 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_4_5;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.lishid.openinv.internal.IAnySilentChest;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_4_5.Block;
|
|
||||||
import net.minecraft.server.v1_4_5.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_4_5.IInventory;
|
|
||||||
import net.minecraft.server.v1_4_5.InventoryLargeChest;
|
|
||||||
import net.minecraft.server.v1_4_5.Packet100OpenWindow;
|
|
||||||
import net.minecraft.server.v1_4_5.TileEntityChest;
|
|
||||||
import net.minecraft.server.v1_4_5.World;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_4_5.entity.CraftPlayer;
|
|
||||||
|
|
||||||
public class AnySilentChest implements IAnySilentChest {
|
|
||||||
@Override
|
|
||||||
public boolean isAnyChestNeeded(Player p, int x, int y, int z) {
|
|
||||||
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
// If block on top
|
|
||||||
if (world.s(x, y + 1, z))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
// If block next to chest is chest and has a block on top
|
|
||||||
if ((world.getTypeId(x - 1, y, z) == Block.CHEST.id) && (world.s(x - 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x + 1, y, z) == Block.CHEST.id) && (world.s(x + 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z - 1) == Block.CHEST.id) && (world.s(x, y + 1, z - 1)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z + 1) == Block.CHEST.id) && (world.s(x, y + 1, z + 1)))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean activateChest(Player p, boolean anychest, boolean silentchest, int x, int y, int z) {
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
Object chest = world.getTileEntity(x, y, z);
|
|
||||||
if (chest == null)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (!anychest) {
|
|
||||||
if (world.s(x, y + 1, z))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x - 1, y, z) == Block.CHEST.id) && (world.s(x - 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x + 1, y, z) == Block.CHEST.id) && (world.s(x + 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z - 1) == Block.CHEST.id) && (world.s(x, y + 1, z - 1)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z + 1) == Block.CHEST.id) && (world.s(x, y + 1, z + 1)))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (world.getTypeId(x - 1, y, z) == Block.CHEST.id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x - 1, y, z), (IInventory) chest);
|
|
||||||
if (world.getTypeId(x + 1, y, z) == Block.CHEST.id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x + 1, y, z));
|
|
||||||
if (world.getTypeId(x, y, z - 1) == Block.CHEST.id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x, y, z - 1), (IInventory) chest);
|
|
||||||
if (world.getTypeId(x, y, z + 1) == Block.CHEST.id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x, y, z + 1));
|
|
||||||
|
|
||||||
boolean returnValue = true;
|
|
||||||
if (!silentchest) {
|
|
||||||
player.openContainer((IInventory) chest);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
try {
|
|
||||||
int id = 0;
|
|
||||||
try {
|
|
||||||
Field windowID = player.getClass().getDeclaredField("containerCounter");
|
|
||||||
windowID.setAccessible(true);
|
|
||||||
id = windowID.getInt(player);
|
|
||||||
id = id % 100 + 1;
|
|
||||||
windowID.setInt(player, id);
|
|
||||||
}
|
|
||||||
catch (NoSuchFieldException e) {}
|
|
||||||
|
|
||||||
player.netServerHandler.sendPacket(new Packet100OpenWindow(id, 0, ((IInventory) chest).getName(), ((IInventory) chest).getSize()));
|
|
||||||
player.activeContainer = new SilentContainerChest(player.inventory, ((IInventory) chest));
|
|
||||||
player.activeContainer.windowId = id;
|
|
||||||
player.activeContainer.addSlotListener(player);
|
|
||||||
returnValue = false;
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
p.sendMessage(ChatColor.RED + "Error while sending silent chest.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_4_5;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.Permissions;
|
|
||||||
import com.lishid.openinv.internal.IInventoryAccess;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_4_5.IInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_4_5.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class InventoryAccess implements IInventoryAccess {
|
|
||||||
@Override
|
|
||||||
public boolean check(Inventory inventory, HumanEntity player) {
|
|
||||||
IInventory inv = ((CraftInventory) inventory).getInventory();
|
|
||||||
|
|
||||||
if (inv instanceof SpecialPlayerInventory) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITINV)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (inv instanceof SpecialEnderChest) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITENDER)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_4_5;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.OfflinePlayer;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_4_5.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_4_5.ItemInWorldManager;
|
|
||||||
import net.minecraft.server.v1_4_5.MinecraftServer;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_4_5.CraftServer;
|
|
||||||
|
|
||||||
public class PlayerDataManager extends com.lishid.openinv.internal.PlayerDataManager {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Player loadOfflinePlayer(OfflinePlayer offline) {
|
|
||||||
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
|
|
||||||
|
|
||||||
// Create an entity to load the player data
|
|
||||||
EntityPlayer entity = new EntityPlayer(server, server.getWorldServer(0), offline.getName(), new ItemInWorldManager(server.getWorldServer(0)));
|
|
||||||
|
|
||||||
// Get the bukkit entity
|
|
||||||
Player target = (entity == null) ? null : entity.getBukkitEntity();
|
|
||||||
if (target != null) {
|
|
||||||
// Load data
|
|
||||||
target.loadData();
|
|
||||||
// Return the entity
|
|
||||||
return target;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPlayerDataID(OfflinePlayer player) {
|
|
||||||
return player.getName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_4_5;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_4_5.ContainerChest;
|
|
||||||
import net.minecraft.server.v1_4_5.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_4_5.IInventory;
|
|
||||||
|
|
||||||
public class SilentContainerChest extends ContainerChest {
|
|
||||||
public IInventory inv;
|
|
||||||
|
|
||||||
public SilentContainerChest(IInventory i1, IInventory i2) {
|
|
||||||
super(i1, i2);
|
|
||||||
inv = i2;
|
|
||||||
// close signal
|
|
||||||
inv.f();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(EntityHuman paramEntityHuman) {
|
|
||||||
// Don't send close signal twice, might screw up
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,150 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_4_5;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialEnderChest;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_4_5.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_4_5.IInventory;
|
|
||||||
import net.minecraft.server.v1_4_5.InventoryEnderChest;
|
|
||||||
import net.minecraft.server.v1_4_5.InventorySubcontainer;
|
|
||||||
import net.minecraft.server.v1_4_5.ItemStack;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_4_5.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_4_5.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_4_5.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final InventoryEnderChest enderChest;
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
|
|
||||||
public boolean playerOnline = false;
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private int maxStack = MAX_STACK;
|
|
||||||
|
|
||||||
public SpecialEnderChest(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle().getEnderChest().getName(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
|
|
||||||
this.plugin = plugin;
|
|
||||||
CraftPlayer player = (CraftPlayer) p;
|
|
||||||
this.enderChest = player.getHandle().getEnderChest();
|
|
||||||
this.owner = player;
|
|
||||||
this.items = enderChest.getContents();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
try {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
|
|
||||||
Field field = playerEnderChest.getClass().getField("items");
|
|
||||||
field.setAccessible(true);
|
|
||||||
field.set(playerEnderChest, this.items);
|
|
||||||
}
|
|
||||||
catch (Exception e) {}
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
return this.items;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onOpen(CraftHumanEntity who) {
|
|
||||||
transaction.add(who);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
transaction.remove(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<HumanEntity> getViewers() {
|
|
||||||
return transaction;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InventoryHolder getOwner() {
|
|
||||||
return this.owner;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setMaxStackSize(int size) {
|
|
||||||
maxStack = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxStackSize() {
|
|
||||||
return maxStack;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean a(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void startOpen() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void f() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update() {
|
|
||||||
enderChest.update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,260 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_4_5;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_4_5.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_4_5.ItemStack;
|
|
||||||
import net.minecraft.server.v1_4_5.PlayerInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_4_5.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_4_5.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_4_5.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final ItemStack[] extra = new ItemStack[5];
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private boolean playerOnline = false;
|
|
||||||
|
|
||||||
public SpecialPlayerInventory(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle());
|
|
||||||
this.plugin = plugin;
|
|
||||||
this.owner = ((CraftPlayer) p);
|
|
||||||
this.playerOnline = online;
|
|
||||||
this.items = player.inventory.items;
|
|
||||||
this.armor = player.inventory.armor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
this.player = owner.getHandle();
|
|
||||||
this.player.inventory.items = this.items;
|
|
||||||
this.player.inventory.armor = this.armor;
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return this.inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
super.onClose(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
ItemStack[] C = new ItemStack[getSize()];
|
|
||||||
System.arraycopy(items, 0, C, 0, items.length);
|
|
||||||
System.arraycopy(items, 0, C, items.length, armor.length);
|
|
||||||
return C;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getSize() {
|
|
||||||
return super.getSize() + 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getItem(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
return is[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitStack(int i, int j) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack;
|
|
||||||
|
|
||||||
if (is[i].count <= j) {
|
|
||||||
itemstack = is[i];
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
itemstack = is[i].a(j);
|
|
||||||
if (is[i].count == 0) {
|
|
||||||
is[i] = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitWithoutUpdate(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack = is[i];
|
|
||||||
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setItem(int i, ItemStack itemstack) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Effects
|
|
||||||
if (is == this.extra) {
|
|
||||||
owner.getHandle().drop(itemstack);
|
|
||||||
itemstack = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
is[i] = itemstack;
|
|
||||||
|
|
||||||
owner.getHandle().defaultContainer.b();
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedItemSlotNum(int i) {
|
|
||||||
if (i >= 27)
|
|
||||||
return i - 27;
|
|
||||||
else
|
|
||||||
return i + 9;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedArmorSlotNum(int i) {
|
|
||||||
if (i == 0)
|
|
||||||
return 3;
|
|
||||||
if (i == 1)
|
|
||||||
return 2;
|
|
||||||
if (i == 2)
|
|
||||||
return 1;
|
|
||||||
if (i == 3)
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
if (player.name.length() > 16) {
|
|
||||||
return player.name.substring(0, 16);
|
|
||||||
}
|
|
||||||
return player.name;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean a_(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,120 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_4_6;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.lishid.openinv.internal.IAnySilentChest;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_4_6.Block;
|
|
||||||
import net.minecraft.server.v1_4_6.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_4_6.IInventory;
|
|
||||||
import net.minecraft.server.v1_4_6.InventoryLargeChest;
|
|
||||||
import net.minecraft.server.v1_4_6.Packet100OpenWindow;
|
|
||||||
import net.minecraft.server.v1_4_6.TileEntityChest;
|
|
||||||
import net.minecraft.server.v1_4_6.World;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import org.bukkit.craftbukkit.v1_4_6.entity.CraftPlayer;
|
|
||||||
|
|
||||||
public class AnySilentChest implements IAnySilentChest {
|
|
||||||
@Override
|
|
||||||
public boolean isAnyChestNeeded(Player p, int x, int y, int z) {
|
|
||||||
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
// If block on top
|
|
||||||
if (world.s(x, y + 1, z))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
// If block next to chest is chest and has a block on top
|
|
||||||
if ((world.getTypeId(x - 1, y, z) == Block.CHEST.id) && (world.s(x - 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x + 1, y, z) == Block.CHEST.id) && (world.s(x + 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z - 1) == Block.CHEST.id) && (world.s(x, y + 1, z - 1)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z + 1) == Block.CHEST.id) && (world.s(x, y + 1, z + 1)))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean activateChest(Player p, boolean anychest, boolean silentchest, int x, int y, int z) {
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
Object chest = world.getTileEntity(x, y, z);
|
|
||||||
if (chest == null)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (!anychest) {
|
|
||||||
if (world.s(x, y + 1, z))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x - 1, y, z) == Block.CHEST.id) && (world.s(x - 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x + 1, y, z) == Block.CHEST.id) && (world.s(x + 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z - 1) == Block.CHEST.id) && (world.s(x, y + 1, z - 1)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z + 1) == Block.CHEST.id) && (world.s(x, y + 1, z + 1)))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (world.getTypeId(x - 1, y, z) == Block.CHEST.id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x - 1, y, z), (IInventory) chest);
|
|
||||||
if (world.getTypeId(x + 1, y, z) == Block.CHEST.id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x + 1, y, z));
|
|
||||||
if (world.getTypeId(x, y, z - 1) == Block.CHEST.id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x, y, z - 1), (IInventory) chest);
|
|
||||||
if (world.getTypeId(x, y, z + 1) == Block.CHEST.id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x, y, z + 1));
|
|
||||||
|
|
||||||
boolean returnValue = true;
|
|
||||||
if (!silentchest) {
|
|
||||||
player.openContainer((IInventory) chest);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
try {
|
|
||||||
int id = 0;
|
|
||||||
try {
|
|
||||||
Field windowID = player.getClass().getDeclaredField("containerCounter");
|
|
||||||
windowID.setAccessible(true);
|
|
||||||
id = windowID.getInt(player);
|
|
||||||
id = id % 100 + 1;
|
|
||||||
windowID.setInt(player, id);
|
|
||||||
}
|
|
||||||
catch (NoSuchFieldException e) {}
|
|
||||||
|
|
||||||
player.playerConnection.sendPacket(new Packet100OpenWindow(id, 0, ((IInventory) chest).getName(), ((IInventory) chest).getSize()));
|
|
||||||
player.activeContainer = new SilentContainerChest(player.inventory, ((IInventory) chest));
|
|
||||||
player.activeContainer.windowId = id;
|
|
||||||
player.activeContainer.addSlotListener(player);
|
|
||||||
returnValue = false;
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
p.sendMessage(ChatColor.RED + "Error while sending silent chest.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_4_6;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.Permissions;
|
|
||||||
import com.lishid.openinv.internal.IInventoryAccess;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_4_6.IInventory;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import org.bukkit.craftbukkit.v1_4_6.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class InventoryAccess implements IInventoryAccess {
|
|
||||||
@Override
|
|
||||||
public boolean check(Inventory inventory, HumanEntity player) {
|
|
||||||
IInventory inv = ((CraftInventory) inventory).getInventory();
|
|
||||||
|
|
||||||
if (inv instanceof SpecialPlayerInventory) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITINV)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (inv instanceof SpecialEnderChest) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITENDER)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_4_6;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.OfflinePlayer;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_4_6.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_4_6.MinecraftServer;
|
|
||||||
import net.minecraft.server.v1_4_6.PlayerInteractManager;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_4_6.CraftServer;
|
|
||||||
|
|
||||||
public class PlayerDataManager extends com.lishid.openinv.internal.PlayerDataManager {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Player loadOfflinePlayer(OfflinePlayer offline) {
|
|
||||||
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
|
|
||||||
|
|
||||||
// Create an entity to load the player data
|
|
||||||
EntityPlayer entity = new EntityPlayer(server, server.getWorldServer(0), offline.getName(), new PlayerInteractManager(server.getWorldServer(0)));
|
|
||||||
|
|
||||||
// Get the bukkit entity
|
|
||||||
Player target = (entity == null) ? null : entity.getBukkitEntity();
|
|
||||||
if (target != null) {
|
|
||||||
// Load data
|
|
||||||
target.loadData();
|
|
||||||
// Return the entity
|
|
||||||
return target;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPlayerDataID(OfflinePlayer player) {
|
|
||||||
return player.getName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_4_6;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_4_6.ContainerChest;
|
|
||||||
import net.minecraft.server.v1_4_6.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_4_6.IInventory;
|
|
||||||
|
|
||||||
public class SilentContainerChest extends ContainerChest {
|
|
||||||
public IInventory inv;
|
|
||||||
|
|
||||||
public SilentContainerChest(IInventory i1, IInventory i2) {
|
|
||||||
super(i1, i2);
|
|
||||||
inv = i2;
|
|
||||||
// close signal
|
|
||||||
inv.f();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(EntityHuman paramEntityHuman) {
|
|
||||||
// Don't send close signal twice, might screw up
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,150 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_4_6;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialEnderChest;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_4_6.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_4_6.IInventory;
|
|
||||||
import net.minecraft.server.v1_4_6.InventoryEnderChest;
|
|
||||||
import net.minecraft.server.v1_4_6.InventorySubcontainer;
|
|
||||||
import net.minecraft.server.v1_4_6.ItemStack;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_4_6.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_4_6.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_4_6.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final InventoryEnderChest enderChest;
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
|
|
||||||
public boolean playerOnline = false;
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private int maxStack = MAX_STACK;
|
|
||||||
|
|
||||||
public SpecialEnderChest(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle().getEnderChest().getName(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
|
|
||||||
this.plugin = plugin;
|
|
||||||
CraftPlayer player = (CraftPlayer) p;
|
|
||||||
this.enderChest = player.getHandle().getEnderChest();
|
|
||||||
this.owner = player;
|
|
||||||
this.items = enderChest.getContents();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
try {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
|
|
||||||
Field field = playerEnderChest.getClass().getField("items");
|
|
||||||
field.setAccessible(true);
|
|
||||||
field.set(playerEnderChest, this.items);
|
|
||||||
}
|
|
||||||
catch (Exception e) {}
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
return this.items;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onOpen(CraftHumanEntity who) {
|
|
||||||
transaction.add(who);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
transaction.remove(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<HumanEntity> getViewers() {
|
|
||||||
return transaction;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InventoryHolder getOwner() {
|
|
||||||
return this.owner;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setMaxStackSize(int size) {
|
|
||||||
maxStack = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxStackSize() {
|
|
||||||
return maxStack;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean a(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void startOpen() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void f() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update() {
|
|
||||||
enderChest.update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,260 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_4_6;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_4_6.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_4_6.ItemStack;
|
|
||||||
import net.minecraft.server.v1_4_6.PlayerInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_4_6.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_4_6.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_4_6.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final ItemStack[] extra = new ItemStack[5];
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private boolean playerOnline = false;
|
|
||||||
|
|
||||||
public SpecialPlayerInventory(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle());
|
|
||||||
this.plugin = plugin;
|
|
||||||
this.owner = ((CraftPlayer) p);
|
|
||||||
this.playerOnline = online;
|
|
||||||
this.items = player.inventory.items;
|
|
||||||
this.armor = player.inventory.armor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
this.player = owner.getHandle();
|
|
||||||
this.player.inventory.items = this.items;
|
|
||||||
this.player.inventory.armor = this.armor;
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return this.inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
super.onClose(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
ItemStack[] C = new ItemStack[getSize()];
|
|
||||||
System.arraycopy(items, 0, C, 0, items.length);
|
|
||||||
System.arraycopy(items, 0, C, items.length, armor.length);
|
|
||||||
return C;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getSize() {
|
|
||||||
return super.getSize() + 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getItem(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
return is[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitStack(int i, int j) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack;
|
|
||||||
|
|
||||||
if (is[i].count <= j) {
|
|
||||||
itemstack = is[i];
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
itemstack = is[i].a(j);
|
|
||||||
if (is[i].count == 0) {
|
|
||||||
is[i] = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitWithoutUpdate(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack = is[i];
|
|
||||||
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setItem(int i, ItemStack itemstack) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Effects
|
|
||||||
if (is == this.extra) {
|
|
||||||
owner.getHandle().drop(itemstack);
|
|
||||||
itemstack = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
is[i] = itemstack;
|
|
||||||
|
|
||||||
owner.getHandle().defaultContainer.b();
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedItemSlotNum(int i) {
|
|
||||||
if (i >= 27)
|
|
||||||
return i - 27;
|
|
||||||
else
|
|
||||||
return i + 9;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedArmorSlotNum(int i) {
|
|
||||||
if (i == 0)
|
|
||||||
return 3;
|
|
||||||
if (i == 1)
|
|
||||||
return 2;
|
|
||||||
if (i == 2)
|
|
||||||
return 1;
|
|
||||||
if (i == 3)
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
if (player.name.length() > 16) {
|
|
||||||
return player.name.substring(0, 16);
|
|
||||||
}
|
|
||||||
return player.name;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean a_(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,120 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_4_R1;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.lishid.openinv.internal.IAnySilentChest;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_4_R1.Block;
|
|
||||||
import net.minecraft.server.v1_4_R1.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_4_R1.IInventory;
|
|
||||||
import net.minecraft.server.v1_4_R1.InventoryLargeChest;
|
|
||||||
import net.minecraft.server.v1_4_R1.Packet100OpenWindow;
|
|
||||||
import net.minecraft.server.v1_4_R1.TileEntityChest;
|
|
||||||
import net.minecraft.server.v1_4_R1.World;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import org.bukkit.craftbukkit.v1_4_R1.entity.CraftPlayer;
|
|
||||||
|
|
||||||
public class AnySilentChest implements IAnySilentChest {
|
|
||||||
@Override
|
|
||||||
public boolean isAnyChestNeeded(Player p, int x, int y, int z) {
|
|
||||||
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
// If block on top
|
|
||||||
if (world.s(x, y + 1, z))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
// If block next to chest is chest and has a block on top
|
|
||||||
if ((world.getTypeId(x - 1, y, z) == Block.CHEST.id) && (world.s(x - 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x + 1, y, z) == Block.CHEST.id) && (world.s(x + 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z - 1) == Block.CHEST.id) && (world.s(x, y + 1, z - 1)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z + 1) == Block.CHEST.id) && (world.s(x, y + 1, z + 1)))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean activateChest(Player p, boolean anychest, boolean silentchest, int x, int y, int z) {
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
Object chest = world.getTileEntity(x, y, z);
|
|
||||||
if (chest == null)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (!anychest) {
|
|
||||||
if (world.s(x, y + 1, z))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x - 1, y, z) == Block.CHEST.id) && (world.s(x - 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x + 1, y, z) == Block.CHEST.id) && (world.s(x + 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z - 1) == Block.CHEST.id) && (world.s(x, y + 1, z - 1)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z + 1) == Block.CHEST.id) && (world.s(x, y + 1, z + 1)))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (world.getTypeId(x - 1, y, z) == Block.CHEST.id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x - 1, y, z), (IInventory) chest);
|
|
||||||
if (world.getTypeId(x + 1, y, z) == Block.CHEST.id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x + 1, y, z));
|
|
||||||
if (world.getTypeId(x, y, z - 1) == Block.CHEST.id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x, y, z - 1), (IInventory) chest);
|
|
||||||
if (world.getTypeId(x, y, z + 1) == Block.CHEST.id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x, y, z + 1));
|
|
||||||
|
|
||||||
boolean returnValue = true;
|
|
||||||
if (!silentchest) {
|
|
||||||
player.openContainer((IInventory) chest);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
try {
|
|
||||||
int id = 0;
|
|
||||||
try {
|
|
||||||
Field windowID = player.getClass().getDeclaredField("containerCounter");
|
|
||||||
windowID.setAccessible(true);
|
|
||||||
id = windowID.getInt(player);
|
|
||||||
id = id % 100 + 1;
|
|
||||||
windowID.setInt(player, id);
|
|
||||||
}
|
|
||||||
catch (NoSuchFieldException e) {}
|
|
||||||
|
|
||||||
player.playerConnection.sendPacket(new Packet100OpenWindow(id, 0, ((IInventory) chest).getName(), ((IInventory) chest).getSize()));
|
|
||||||
player.activeContainer = new SilentContainerChest(player.inventory, ((IInventory) chest));
|
|
||||||
player.activeContainer.windowId = id;
|
|
||||||
player.activeContainer.addSlotListener(player);
|
|
||||||
returnValue = false;
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
p.sendMessage(ChatColor.RED + "Error while sending silent chest.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_4_R1;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.Permissions;
|
|
||||||
import com.lishid.openinv.internal.IInventoryAccess;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_4_R1.IInventory;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import org.bukkit.craftbukkit.v1_4_R1.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class InventoryAccess implements IInventoryAccess {
|
|
||||||
@Override
|
|
||||||
public boolean check(Inventory inventory, HumanEntity player) {
|
|
||||||
IInventory inv = ((CraftInventory) inventory).getInventory();
|
|
||||||
|
|
||||||
if (inv instanceof SpecialPlayerInventory) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITINV)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (inv instanceof SpecialEnderChest) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITENDER)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_4_R1;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.OfflinePlayer;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_4_R1.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_4_R1.MinecraftServer;
|
|
||||||
import net.minecraft.server.v1_4_R1.PlayerInteractManager;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import org.bukkit.craftbukkit.v1_4_R1.CraftServer;
|
|
||||||
|
|
||||||
|
|
||||||
public class PlayerDataManager extends com.lishid.openinv.internal.PlayerDataManager {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Player loadOfflinePlayer(OfflinePlayer offline) {
|
|
||||||
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
|
|
||||||
|
|
||||||
// Create an entity to load the player data
|
|
||||||
EntityPlayer entity = new EntityPlayer(server, server.getWorldServer(0), offline.getName(), new PlayerInteractManager(server.getWorldServer(0)));
|
|
||||||
|
|
||||||
// Get the bukkit entity
|
|
||||||
Player target = (entity == null) ? null : entity.getBukkitEntity();
|
|
||||||
if (target != null) {
|
|
||||||
// Load data
|
|
||||||
target.loadData();
|
|
||||||
// Return the entity
|
|
||||||
return target;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPlayerDataID(OfflinePlayer player) {
|
|
||||||
return player.getName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_4_R1;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_4_R1.ContainerChest;
|
|
||||||
import net.minecraft.server.v1_4_R1.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_4_R1.IInventory;
|
|
||||||
|
|
||||||
public class SilentContainerChest extends ContainerChest {
|
|
||||||
public IInventory inv;
|
|
||||||
|
|
||||||
public SilentContainerChest(IInventory i1, IInventory i2) {
|
|
||||||
super(i1, i2);
|
|
||||||
inv = i2;
|
|
||||||
// close signal
|
|
||||||
inv.f();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(EntityHuman paramEntityHuman) {
|
|
||||||
// Don't send close signal twice, might screw up
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,150 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_4_R1;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
// Volatile
|
|
||||||
import com.lishid.openinv.internal.ISpecialEnderChest;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_4_R1.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_4_R1.IInventory;
|
|
||||||
import net.minecraft.server.v1_4_R1.InventoryEnderChest;
|
|
||||||
import net.minecraft.server.v1_4_R1.InventorySubcontainer;
|
|
||||||
import net.minecraft.server.v1_4_R1.ItemStack;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_4_R1.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_4_R1.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_4_R1.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final InventoryEnderChest enderChest;
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
|
|
||||||
public boolean playerOnline = false;
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private int maxStack = MAX_STACK;
|
|
||||||
|
|
||||||
public SpecialEnderChest(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle().getEnderChest().getName(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
|
|
||||||
this.plugin = plugin;
|
|
||||||
CraftPlayer player = (CraftPlayer) p;
|
|
||||||
this.enderChest = player.getHandle().getEnderChest();
|
|
||||||
this.owner = player;
|
|
||||||
this.items = enderChest.getContents();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
try {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
|
|
||||||
Field field = playerEnderChest.getClass().getField("items");
|
|
||||||
field.setAccessible(true);
|
|
||||||
field.set(playerEnderChest, this.items);
|
|
||||||
}
|
|
||||||
catch (Exception e) {}
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
return this.items;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onOpen(CraftHumanEntity who) {
|
|
||||||
transaction.add(who);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
transaction.remove(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<HumanEntity> getViewers() {
|
|
||||||
return transaction;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InventoryHolder getOwner() {
|
|
||||||
return this.owner;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setMaxStackSize(int size) {
|
|
||||||
maxStack = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxStackSize() {
|
|
||||||
return maxStack;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean a(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void startOpen() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void f() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update() {
|
|
||||||
enderChest.update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,260 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_4_R1;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_4_R1.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_4_R1.ItemStack;
|
|
||||||
import net.minecraft.server.v1_4_R1.PlayerInventory;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import org.bukkit.craftbukkit.v1_4_R1.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_4_R1.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_4_R1.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final ItemStack[] extra = new ItemStack[5];
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private boolean playerOnline = false;
|
|
||||||
|
|
||||||
public SpecialPlayerInventory(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle());
|
|
||||||
this.plugin = plugin;
|
|
||||||
this.owner = ((CraftPlayer) p);
|
|
||||||
this.playerOnline = online;
|
|
||||||
this.items = player.inventory.items;
|
|
||||||
this.armor = player.inventory.armor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
this.player = owner.getHandle();
|
|
||||||
this.player.inventory.items = this.items;
|
|
||||||
this.player.inventory.armor = this.armor;
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return this.inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
super.onClose(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
ItemStack[] C = new ItemStack[getSize()];
|
|
||||||
System.arraycopy(items, 0, C, 0, items.length);
|
|
||||||
System.arraycopy(items, 0, C, items.length, armor.length);
|
|
||||||
return C;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getSize() {
|
|
||||||
return super.getSize() + 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getItem(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
return is[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitStack(int i, int j) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack;
|
|
||||||
|
|
||||||
if (is[i].count <= j) {
|
|
||||||
itemstack = is[i];
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
itemstack = is[i].a(j);
|
|
||||||
if (is[i].count == 0) {
|
|
||||||
is[i] = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitWithoutUpdate(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack = is[i];
|
|
||||||
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setItem(int i, ItemStack itemstack) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Effects
|
|
||||||
if (is == this.extra) {
|
|
||||||
owner.getHandle().drop(itemstack);
|
|
||||||
itemstack = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
is[i] = itemstack;
|
|
||||||
|
|
||||||
owner.getHandle().defaultContainer.b();
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedItemSlotNum(int i) {
|
|
||||||
if (i >= 27)
|
|
||||||
return i - 27;
|
|
||||||
else
|
|
||||||
return i + 9;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedArmorSlotNum(int i) {
|
|
||||||
if (i == 0)
|
|
||||||
return 3;
|
|
||||||
if (i == 1)
|
|
||||||
return 2;
|
|
||||||
if (i == 2)
|
|
||||||
return 1;
|
|
||||||
if (i == 3)
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
if (player.name.length() > 16) {
|
|
||||||
return player.name.substring(0, 16);
|
|
||||||
}
|
|
||||||
return player.name;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean a_(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,123 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_5_R2;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.lishid.openinv.internal.IAnySilentChest;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_5_R2.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_5_R2.IInventory;
|
|
||||||
import net.minecraft.server.v1_5_R2.InventoryLargeChest;
|
|
||||||
import net.minecraft.server.v1_5_R2.Packet100OpenWindow;
|
|
||||||
import net.minecraft.server.v1_5_R2.TileEntityChest;
|
|
||||||
import net.minecraft.server.v1_5_R2.World;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_5_R2.entity.CraftPlayer;
|
|
||||||
|
|
||||||
public class AnySilentChest implements IAnySilentChest {
|
|
||||||
@Override
|
|
||||||
public boolean isAnyChestNeeded(Player p, int x, int y, int z) {
|
|
||||||
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
// If block on top
|
|
||||||
if (world.t(x, y + 1, z))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
int id = world.getTypeId(x, y, z);
|
|
||||||
|
|
||||||
// If block next to chest is chest and has a block on top
|
|
||||||
if ((world.getTypeId(x - 1, y, z) == id) && (world.t(x - 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x + 1, y, z) == id) && (world.t(x + 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z - 1) == id) && (world.t(x, y + 1, z - 1)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z + 1) == id) && (world.t(x, y + 1, z + 1)))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean activateChest(Player p, boolean anychest, boolean silentchest, int x, int y, int z) {
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
Object chest = world.getTileEntity(x, y, z);
|
|
||||||
if (chest == null)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
int id = world.getTypeId(x, y, z);
|
|
||||||
|
|
||||||
if (!anychest) {
|
|
||||||
if (world.t(x, y + 1, z))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x - 1, y, z) == id) && (world.t(x - 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x + 1, y, z) == id) && (world.t(x + 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z - 1) == id) && (world.t(x, y + 1, z - 1)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z + 1) == id) && (world.t(x, y + 1, z + 1)))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (world.getTypeId(x - 1, y, z) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x - 1, y, z), (IInventory) chest);
|
|
||||||
if (world.getTypeId(x + 1, y, z) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x + 1, y, z));
|
|
||||||
if (world.getTypeId(x, y, z - 1) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x, y, z - 1), (IInventory) chest);
|
|
||||||
if (world.getTypeId(x, y, z + 1) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x, y, z + 1));
|
|
||||||
|
|
||||||
boolean returnValue = true;
|
|
||||||
if (!silentchest) {
|
|
||||||
player.openContainer((IInventory) chest);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
try {
|
|
||||||
int windowId = 0;
|
|
||||||
try {
|
|
||||||
Field windowID = player.getClass().getDeclaredField("containerCounter");
|
|
||||||
windowID.setAccessible(true);
|
|
||||||
windowId = windowID.getInt(player);
|
|
||||||
windowId = windowId % 100 + 1;
|
|
||||||
windowID.setInt(player, windowId);
|
|
||||||
}
|
|
||||||
catch (NoSuchFieldException e) {}
|
|
||||||
|
|
||||||
player.playerConnection.sendPacket(new Packet100OpenWindow(windowId, 0, ((IInventory) chest).getName(), ((IInventory) chest).getSize(), true));
|
|
||||||
player.activeContainer = new SilentContainerChest(player.inventory, ((IInventory) chest));
|
|
||||||
player.activeContainer.windowId = windowId;
|
|
||||||
player.activeContainer.addSlotListener(player);
|
|
||||||
returnValue = false;
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
p.sendMessage(ChatColor.RED + "Error while sending silent chest.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_5_R2;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.Permissions;
|
|
||||||
import com.lishid.openinv.internal.IInventoryAccess;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_5_R2.IInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_5_R2.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class InventoryAccess implements IInventoryAccess {
|
|
||||||
@Override
|
|
||||||
public boolean check(Inventory inventory, HumanEntity player) {
|
|
||||||
IInventory inv = ((CraftInventory) inventory).getInventory();
|
|
||||||
|
|
||||||
if (inv instanceof SpecialPlayerInventory) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITINV)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (inv instanceof SpecialEnderChest) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITENDER)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_5_R2;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.OfflinePlayer;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_5_R2.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_5_R2.MinecraftServer;
|
|
||||||
import net.minecraft.server.v1_5_R2.PlayerInteractManager;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_5_R2.CraftServer;
|
|
||||||
|
|
||||||
public class PlayerDataManager extends com.lishid.openinv.internal.PlayerDataManager {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Player loadOfflinePlayer(OfflinePlayer offline) {
|
|
||||||
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
|
|
||||||
|
|
||||||
// Create an entity to load the player data
|
|
||||||
EntityPlayer entity = new EntityPlayer(server, server.getWorldServer(0), offline.getName(), new PlayerInteractManager(server.getWorldServer(0)));
|
|
||||||
|
|
||||||
// Get the bukkit entity
|
|
||||||
Player target = (entity == null) ? null : entity.getBukkitEntity();
|
|
||||||
if (target != null) {
|
|
||||||
// Load data
|
|
||||||
target.loadData();
|
|
||||||
// Return the entity
|
|
||||||
return target;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPlayerDataID(OfflinePlayer player) {
|
|
||||||
return player.getName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_5_R2;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_5_R2.ContainerChest;
|
|
||||||
import net.minecraft.server.v1_5_R2.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_5_R2.IInventory;
|
|
||||||
|
|
||||||
public class SilentContainerChest extends ContainerChest {
|
|
||||||
public IInventory inv;
|
|
||||||
|
|
||||||
public SilentContainerChest(IInventory i1, IInventory i2) {
|
|
||||||
super(i1, i2);
|
|
||||||
inv = i2;
|
|
||||||
// close signal
|
|
||||||
inv.g();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(EntityHuman paramEntityHuman) {
|
|
||||||
// Don't send close signal twice, might screw up
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,150 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_5_R2;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialEnderChest;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_5_R2.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_5_R2.IInventory;
|
|
||||||
import net.minecraft.server.v1_5_R2.InventoryEnderChest;
|
|
||||||
import net.minecraft.server.v1_5_R2.InventorySubcontainer;
|
|
||||||
import net.minecraft.server.v1_5_R2.ItemStack;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_5_R2.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_5_R2.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_5_R2.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final InventoryEnderChest enderChest;
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
|
|
||||||
public boolean playerOnline = false;
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private int maxStack = MAX_STACK;
|
|
||||||
|
|
||||||
public SpecialEnderChest(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle().getEnderChest().getName(), ((CraftPlayer) p).getHandle().getEnderChest().c(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
|
|
||||||
this.plugin = plugin;
|
|
||||||
CraftPlayer player = (CraftPlayer) p;
|
|
||||||
this.enderChest = player.getHandle().getEnderChest();
|
|
||||||
this.owner = player;
|
|
||||||
this.items = enderChest.getContents();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
try {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
|
|
||||||
Field field = playerEnderChest.getClass().getField("items");
|
|
||||||
field.setAccessible(true);
|
|
||||||
field.set(playerEnderChest, this.items);
|
|
||||||
}
|
|
||||||
catch (Exception e) {}
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
return this.items;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onOpen(CraftHumanEntity who) {
|
|
||||||
transaction.add(who);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
transaction.remove(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<HumanEntity> getViewers() {
|
|
||||||
return transaction;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InventoryHolder getOwner() {
|
|
||||||
return this.owner;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setMaxStackSize(int size) {
|
|
||||||
maxStack = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxStackSize() {
|
|
||||||
return maxStack;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean a(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void startOpen() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void f() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update() {
|
|
||||||
enderChest.update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,260 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_5_R2;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_5_R2.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_5_R2.ItemStack;
|
|
||||||
import net.minecraft.server.v1_5_R2.PlayerInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_5_R2.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_5_R2.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_5_R2.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final ItemStack[] extra = new ItemStack[5];
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private boolean playerOnline = false;
|
|
||||||
|
|
||||||
public SpecialPlayerInventory(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle());
|
|
||||||
this.plugin = plugin;
|
|
||||||
this.owner = ((CraftPlayer) p);
|
|
||||||
this.playerOnline = online;
|
|
||||||
this.items = player.inventory.items;
|
|
||||||
this.armor = player.inventory.armor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
this.player = owner.getHandle();
|
|
||||||
this.player.inventory.items = this.items;
|
|
||||||
this.player.inventory.armor = this.armor;
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return this.inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
super.onClose(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
ItemStack[] C = new ItemStack[getSize()];
|
|
||||||
System.arraycopy(items, 0, C, 0, items.length);
|
|
||||||
System.arraycopy(items, 0, C, items.length, armor.length);
|
|
||||||
return C;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getSize() {
|
|
||||||
return super.getSize() + 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getItem(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
return is[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitStack(int i, int j) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack;
|
|
||||||
|
|
||||||
if (is[i].count <= j) {
|
|
||||||
itemstack = is[i];
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
itemstack = is[i].a(j);
|
|
||||||
if (is[i].count == 0) {
|
|
||||||
is[i] = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitWithoutUpdate(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack = is[i];
|
|
||||||
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setItem(int i, ItemStack itemstack) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Effects
|
|
||||||
if (is == this.extra) {
|
|
||||||
owner.getHandle().drop(itemstack);
|
|
||||||
itemstack = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
is[i] = itemstack;
|
|
||||||
|
|
||||||
owner.getHandle().defaultContainer.b();
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedItemSlotNum(int i) {
|
|
||||||
if (i >= 27)
|
|
||||||
return i - 27;
|
|
||||||
else
|
|
||||||
return i + 9;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedArmorSlotNum(int i) {
|
|
||||||
if (i == 0)
|
|
||||||
return 3;
|
|
||||||
if (i == 1)
|
|
||||||
return 2;
|
|
||||||
if (i == 2)
|
|
||||||
return 1;
|
|
||||||
if (i == 3)
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
if (player.name.length() > 16) {
|
|
||||||
return player.name.substring(0, 16);
|
|
||||||
}
|
|
||||||
return player.name;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean a(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,123 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_5_R3;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.lishid.openinv.internal.IAnySilentChest;
|
|
||||||
|
|
||||||
//Volatile
|
|
||||||
import net.minecraft.server.v1_5_R3.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_5_R3.IInventory;
|
|
||||||
import net.minecraft.server.v1_5_R3.InventoryLargeChest;
|
|
||||||
import net.minecraft.server.v1_5_R3.Packet100OpenWindow;
|
|
||||||
import net.minecraft.server.v1_5_R3.TileEntityChest;
|
|
||||||
import net.minecraft.server.v1_5_R3.World;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_5_R3.entity.CraftPlayer;
|
|
||||||
|
|
||||||
public class AnySilentChest implements IAnySilentChest {
|
|
||||||
@Override
|
|
||||||
public boolean isAnyChestNeeded(Player p, int x, int y, int z) {
|
|
||||||
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
// If block on top
|
|
||||||
if (world.t(x, y + 1, z))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
int id = world.getTypeId(x, y, z);
|
|
||||||
|
|
||||||
// If block next to chest is chest and has a block on top
|
|
||||||
if ((world.getTypeId(x - 1, y, z) == id) && (world.t(x - 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x + 1, y, z) == id) && (world.t(x + 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z - 1) == id) && (world.t(x, y + 1, z - 1)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z + 1) == id) && (world.t(x, y + 1, z + 1)))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean activateChest(Player p, boolean anychest, boolean silentchest, int x, int y, int z) {
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
Object chest = world.getTileEntity(x, y, z);
|
|
||||||
if (chest == null)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
int id = world.getTypeId(x, y, z);
|
|
||||||
|
|
||||||
if (!anychest) {
|
|
||||||
if (world.t(x, y + 1, z))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x - 1, y, z) == id) && (world.t(x - 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x + 1, y, z) == id) && (world.t(x + 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z - 1) == id) && (world.t(x, y + 1, z - 1)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z + 1) == id) && (world.t(x, y + 1, z + 1)))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (world.getTypeId(x - 1, y, z) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x - 1, y, z), (IInventory) chest);
|
|
||||||
if (world.getTypeId(x + 1, y, z) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x + 1, y, z));
|
|
||||||
if (world.getTypeId(x, y, z - 1) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x, y, z - 1), (IInventory) chest);
|
|
||||||
if (world.getTypeId(x, y, z + 1) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x, y, z + 1));
|
|
||||||
|
|
||||||
boolean returnValue = true;
|
|
||||||
if (!silentchest) {
|
|
||||||
player.openContainer((IInventory) chest);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
try {
|
|
||||||
int windowId = 0;
|
|
||||||
try {
|
|
||||||
Field windowID = player.getClass().getDeclaredField("containerCounter");
|
|
||||||
windowID.setAccessible(true);
|
|
||||||
windowId = windowID.getInt(player);
|
|
||||||
windowId = windowId % 100 + 1;
|
|
||||||
windowID.setInt(player, windowId);
|
|
||||||
}
|
|
||||||
catch (NoSuchFieldException e) {}
|
|
||||||
|
|
||||||
player.playerConnection.sendPacket(new Packet100OpenWindow(windowId, 0, ((IInventory) chest).getName(), ((IInventory) chest).getSize(), true));
|
|
||||||
player.activeContainer = new SilentContainerChest(player.inventory, ((IInventory) chest));
|
|
||||||
player.activeContainer.windowId = windowId;
|
|
||||||
player.activeContainer.addSlotListener(player);
|
|
||||||
returnValue = false;
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
p.sendMessage(ChatColor.RED + "Error while sending silent chest.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_5_R3;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.Permissions;
|
|
||||||
import com.lishid.openinv.internal.IInventoryAccess;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_5_R3.IInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_5_R3.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class InventoryAccess implements IInventoryAccess {
|
|
||||||
@Override
|
|
||||||
public boolean check(Inventory inventory, HumanEntity player) {
|
|
||||||
IInventory inv = ((CraftInventory) inventory).getInventory();
|
|
||||||
|
|
||||||
if (inv instanceof SpecialPlayerInventory) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITINV)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (inv instanceof SpecialEnderChest) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITENDER)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_5_R3;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.OfflinePlayer;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_5_R3.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_5_R3.MinecraftServer;
|
|
||||||
import net.minecraft.server.v1_5_R3.PlayerInteractManager;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_5_R3.CraftServer;
|
|
||||||
|
|
||||||
public class PlayerDataManager extends com.lishid.openinv.internal.PlayerDataManager {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Player loadOfflinePlayer(OfflinePlayer offline) {
|
|
||||||
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
|
|
||||||
|
|
||||||
// Create an entity to load the player data
|
|
||||||
EntityPlayer entity = new EntityPlayer(server, server.getWorldServer(0), offline.getName(), new PlayerInteractManager(server.getWorldServer(0)));
|
|
||||||
|
|
||||||
// Get the bukkit entity
|
|
||||||
Player target = (entity == null) ? null : entity.getBukkitEntity();
|
|
||||||
if (target != null) {
|
|
||||||
// Load data
|
|
||||||
target.loadData();
|
|
||||||
// Return the entity
|
|
||||||
return target;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPlayerDataID(OfflinePlayer player) {
|
|
||||||
return player.getName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_5_R3;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_5_R3.ContainerChest;
|
|
||||||
import net.minecraft.server.v1_5_R3.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_5_R3.IInventory;
|
|
||||||
|
|
||||||
public class SilentContainerChest extends ContainerChest {
|
|
||||||
public IInventory inv;
|
|
||||||
|
|
||||||
public SilentContainerChest(IInventory i1, IInventory i2) {
|
|
||||||
super(i1, i2);
|
|
||||||
inv = i2;
|
|
||||||
// close signal
|
|
||||||
inv.g();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(EntityHuman paramEntityHuman) {
|
|
||||||
// Don't send close signal twice, might screw up
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,150 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_5_R3;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialEnderChest;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_5_R3.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_5_R3.IInventory;
|
|
||||||
import net.minecraft.server.v1_5_R3.InventoryEnderChest;
|
|
||||||
import net.minecraft.server.v1_5_R3.InventorySubcontainer;
|
|
||||||
import net.minecraft.server.v1_5_R3.ItemStack;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_5_R3.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_5_R3.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_5_R3.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final InventoryEnderChest enderChest;
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
|
|
||||||
public boolean playerOnline = false;
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private int maxStack = MAX_STACK;
|
|
||||||
|
|
||||||
public SpecialEnderChest(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle().getEnderChest().getName(), ((CraftPlayer) p).getHandle().getEnderChest().c(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
|
|
||||||
this.plugin = plugin;
|
|
||||||
CraftPlayer player = (CraftPlayer) p;
|
|
||||||
this.enderChest = player.getHandle().getEnderChest();
|
|
||||||
this.owner = player;
|
|
||||||
this.items = enderChest.getContents();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
try {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
|
|
||||||
Field field = playerEnderChest.getClass().getField("items");
|
|
||||||
field.setAccessible(true);
|
|
||||||
field.set(playerEnderChest, this.items);
|
|
||||||
}
|
|
||||||
catch (Exception e) {}
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
return this.items;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onOpen(CraftHumanEntity who) {
|
|
||||||
transaction.add(who);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
transaction.remove(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<HumanEntity> getViewers() {
|
|
||||||
return transaction;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InventoryHolder getOwner() {
|
|
||||||
return this.owner;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setMaxStackSize(int size) {
|
|
||||||
maxStack = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxStackSize() {
|
|
||||||
return maxStack;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean a(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void startOpen() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void f() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update() {
|
|
||||||
enderChest.update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,260 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_5_R3;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_5_R3.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_5_R3.ItemStack;
|
|
||||||
import net.minecraft.server.v1_5_R3.PlayerInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_5_R3.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_5_R3.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_5_R3.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final ItemStack[] extra = new ItemStack[5];
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private boolean playerOnline = false;
|
|
||||||
|
|
||||||
public SpecialPlayerInventory(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle());
|
|
||||||
this.plugin = plugin;
|
|
||||||
this.owner = ((CraftPlayer) p);
|
|
||||||
this.playerOnline = online;
|
|
||||||
this.items = player.inventory.items;
|
|
||||||
this.armor = player.inventory.armor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
this.player = owner.getHandle();
|
|
||||||
this.player.inventory.items = this.items;
|
|
||||||
this.player.inventory.armor = this.armor;
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return this.inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
super.onClose(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
ItemStack[] C = new ItemStack[getSize()];
|
|
||||||
System.arraycopy(items, 0, C, 0, items.length);
|
|
||||||
System.arraycopy(items, 0, C, items.length, armor.length);
|
|
||||||
return C;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getSize() {
|
|
||||||
return super.getSize() + 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getItem(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
return is[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitStack(int i, int j) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack;
|
|
||||||
|
|
||||||
if (is[i].count <= j) {
|
|
||||||
itemstack = is[i];
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
itemstack = is[i].a(j);
|
|
||||||
if (is[i].count == 0) {
|
|
||||||
is[i] = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitWithoutUpdate(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack = is[i];
|
|
||||||
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setItem(int i, ItemStack itemstack) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Effects
|
|
||||||
if (is == this.extra) {
|
|
||||||
owner.getHandle().drop(itemstack);
|
|
||||||
itemstack = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
is[i] = itemstack;
|
|
||||||
|
|
||||||
owner.getHandle().defaultContainer.b();
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedItemSlotNum(int i) {
|
|
||||||
if (i >= 27)
|
|
||||||
return i - 27;
|
|
||||||
else
|
|
||||||
return i + 9;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedArmorSlotNum(int i) {
|
|
||||||
if (i == 0)
|
|
||||||
return 3;
|
|
||||||
if (i == 1)
|
|
||||||
return 2;
|
|
||||||
if (i == 2)
|
|
||||||
return 1;
|
|
||||||
if (i == 3)
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
if (player.name.length() > 16) {
|
|
||||||
return player.name.substring(0, 16);
|
|
||||||
}
|
|
||||||
return player.name;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean a(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,123 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_6_R1;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.lishid.openinv.internal.IAnySilentChest;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_6_R1.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_6_R1.IInventory;
|
|
||||||
import net.minecraft.server.v1_6_R1.InventoryLargeChest;
|
|
||||||
import net.minecraft.server.v1_6_R1.Packet100OpenWindow;
|
|
||||||
import net.minecraft.server.v1_6_R1.TileEntityChest;
|
|
||||||
import net.minecraft.server.v1_6_R1.World;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R1.entity.CraftPlayer;
|
|
||||||
|
|
||||||
public class AnySilentChest implements IAnySilentChest {
|
|
||||||
@Override
|
|
||||||
public boolean isAnyChestNeeded(Player p, int x, int y, int z) {
|
|
||||||
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
// If block on top
|
|
||||||
if (world.t(x, y + 1, z))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
int id = world.getTypeId(x, y, z);
|
|
||||||
|
|
||||||
// If block next to chest is chest and has a block on top
|
|
||||||
if ((world.getTypeId(x - 1, y, z) == id) && (world.t(x - 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x + 1, y, z) == id) && (world.t(x + 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z - 1) == id) && (world.t(x, y + 1, z - 1)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z + 1) == id) && (world.t(x, y + 1, z + 1)))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean activateChest(Player p, boolean anychest, boolean silentchest, int x, int y, int z) {
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
Object chest = world.getTileEntity(x, y, z);
|
|
||||||
if (chest == null)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
int id = world.getTypeId(x, y, z);
|
|
||||||
|
|
||||||
if (!anychest) {
|
|
||||||
if (world.t(x, y + 1, z))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x - 1, y, z) == id) && (world.t(x - 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x + 1, y, z) == id) && (world.t(x + 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z - 1) == id) && (world.t(x, y + 1, z - 1)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z + 1) == id) && (world.t(x, y + 1, z + 1)))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (world.getTypeId(x - 1, y, z) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x - 1, y, z), (IInventory) chest);
|
|
||||||
if (world.getTypeId(x + 1, y, z) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x + 1, y, z));
|
|
||||||
if (world.getTypeId(x, y, z - 1) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x, y, z - 1), (IInventory) chest);
|
|
||||||
if (world.getTypeId(x, y, z + 1) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x, y, z + 1));
|
|
||||||
|
|
||||||
boolean returnValue = true;
|
|
||||||
if (!silentchest) {
|
|
||||||
player.openContainer((IInventory) chest);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
try {
|
|
||||||
int windowId = 0;
|
|
||||||
try {
|
|
||||||
Field windowID = player.getClass().getDeclaredField("containerCounter");
|
|
||||||
windowID.setAccessible(true);
|
|
||||||
windowId = windowID.getInt(player);
|
|
||||||
windowId = windowId % 100 + 1;
|
|
||||||
windowID.setInt(player, windowId);
|
|
||||||
}
|
|
||||||
catch (NoSuchFieldException e) {}
|
|
||||||
|
|
||||||
player.playerConnection.sendPacket(new Packet100OpenWindow(windowId, 0, ((IInventory) chest).getName(), ((IInventory) chest).getSize(), true));
|
|
||||||
player.activeContainer = new SilentContainerChest(player.inventory, ((IInventory) chest));
|
|
||||||
player.activeContainer.windowId = windowId;
|
|
||||||
player.activeContainer.addSlotListener(player);
|
|
||||||
returnValue = false;
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
p.sendMessage(ChatColor.RED + "Error while sending silent chest.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_6_R1;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.Permissions;
|
|
||||||
import com.lishid.openinv.internal.IInventoryAccess;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_6_R1.IInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R1.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class InventoryAccess implements IInventoryAccess {
|
|
||||||
@Override
|
|
||||||
public boolean check(Inventory inventory, HumanEntity player) {
|
|
||||||
IInventory inv = ((CraftInventory) inventory).getInventory();
|
|
||||||
|
|
||||||
if (inv instanceof SpecialPlayerInventory) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITINV)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (inv instanceof SpecialEnderChest) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITENDER)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_6_R1;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.OfflinePlayer;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_6_R1.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_6_R1.MinecraftServer;
|
|
||||||
import net.minecraft.server.v1_6_R1.PlayerInteractManager;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R1.CraftServer;
|
|
||||||
|
|
||||||
public class PlayerDataManager extends com.lishid.openinv.internal.PlayerDataManager {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Player loadOfflinePlayer(OfflinePlayer offline) {
|
|
||||||
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
|
|
||||||
|
|
||||||
// Create an entity to load the player data
|
|
||||||
EntityPlayer entity = new EntityPlayer(server, server.getWorldServer(0), offline.getName(), new PlayerInteractManager(server.getWorldServer(0)));
|
|
||||||
|
|
||||||
// Get the bukkit entity
|
|
||||||
Player target = (entity == null) ? null : entity.getBukkitEntity();
|
|
||||||
if (target != null) {
|
|
||||||
// Load data
|
|
||||||
target.loadData();
|
|
||||||
// Return the entity
|
|
||||||
return target;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPlayerDataID(OfflinePlayer player) {
|
|
||||||
return player.getName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_6_R1;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_6_R1.ContainerChest;
|
|
||||||
import net.minecraft.server.v1_6_R1.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_6_R1.IInventory;
|
|
||||||
|
|
||||||
public class SilentContainerChest extends ContainerChest {
|
|
||||||
public IInventory inv;
|
|
||||||
|
|
||||||
public SilentContainerChest(IInventory i1, IInventory i2) {
|
|
||||||
super(i1, i2);
|
|
||||||
inv = i2;
|
|
||||||
// close signal
|
|
||||||
inv.g();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(EntityHuman paramEntityHuman) {
|
|
||||||
// Don't send close signal twice, might screw up
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,150 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_6_R1;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialEnderChest;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_6_R1.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_6_R1.IInventory;
|
|
||||||
import net.minecraft.server.v1_6_R1.InventoryEnderChest;
|
|
||||||
import net.minecraft.server.v1_6_R1.InventorySubcontainer;
|
|
||||||
import net.minecraft.server.v1_6_R1.ItemStack;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R1.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R1.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R1.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final InventoryEnderChest enderChest;
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
|
|
||||||
public boolean playerOnline = false;
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private int maxStack = MAX_STACK;
|
|
||||||
|
|
||||||
public SpecialEnderChest(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle().getEnderChest().getName(), ((CraftPlayer) p).getHandle().getEnderChest().c(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
|
|
||||||
this.plugin = plugin;
|
|
||||||
CraftPlayer player = (CraftPlayer) p;
|
|
||||||
this.enderChest = player.getHandle().getEnderChest();
|
|
||||||
this.owner = player;
|
|
||||||
this.items = enderChest.getContents();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
try {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
|
|
||||||
Field field = playerEnderChest.getClass().getField("items");
|
|
||||||
field.setAccessible(true);
|
|
||||||
field.set(playerEnderChest, this.items);
|
|
||||||
}
|
|
||||||
catch (Exception e) {}
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
return this.items;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onOpen(CraftHumanEntity who) {
|
|
||||||
transaction.add(who);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
transaction.remove(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<HumanEntity> getViewers() {
|
|
||||||
return transaction;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InventoryHolder getOwner() {
|
|
||||||
return this.owner;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setMaxStackSize(int size) {
|
|
||||||
maxStack = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxStackSize() {
|
|
||||||
return maxStack;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean a(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void startOpen() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void f() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update() {
|
|
||||||
enderChest.update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,261 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_6_R1;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_6_R1.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_6_R1.ItemStack;
|
|
||||||
import net.minecraft.server.v1_6_R1.PlayerInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R1.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R1.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R1.inventory.CraftInventory;
|
|
||||||
|
|
||||||
|
|
||||||
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final ItemStack[] extra = new ItemStack[5];
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private boolean playerOnline = false;
|
|
||||||
|
|
||||||
public SpecialPlayerInventory(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle());
|
|
||||||
this.plugin = plugin;
|
|
||||||
this.owner = ((CraftPlayer) p);
|
|
||||||
this.playerOnline = online;
|
|
||||||
this.items = player.inventory.items;
|
|
||||||
this.armor = player.inventory.armor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
this.player = owner.getHandle();
|
|
||||||
this.player.inventory.items = this.items;
|
|
||||||
this.player.inventory.armor = this.armor;
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return this.inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
super.onClose(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
ItemStack[] C = new ItemStack[getSize()];
|
|
||||||
System.arraycopy(items, 0, C, 0, items.length);
|
|
||||||
System.arraycopy(items, 0, C, items.length, armor.length);
|
|
||||||
return C;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getSize() {
|
|
||||||
return super.getSize() + 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getItem(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
return is[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitStack(int i, int j) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack;
|
|
||||||
|
|
||||||
if (is[i].count <= j) {
|
|
||||||
itemstack = is[i];
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
itemstack = is[i].a(j);
|
|
||||||
if (is[i].count == 0) {
|
|
||||||
is[i] = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitWithoutUpdate(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack = is[i];
|
|
||||||
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setItem(int i, ItemStack itemstack) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Effects
|
|
||||||
if (is == this.extra) {
|
|
||||||
owner.getHandle().drop(itemstack);
|
|
||||||
itemstack = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
is[i] = itemstack;
|
|
||||||
|
|
||||||
owner.getHandle().defaultContainer.b();
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedItemSlotNum(int i) {
|
|
||||||
if (i >= 27)
|
|
||||||
return i - 27;
|
|
||||||
else
|
|
||||||
return i + 9;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedArmorSlotNum(int i) {
|
|
||||||
if (i == 0)
|
|
||||||
return 3;
|
|
||||||
if (i == 1)
|
|
||||||
return 2;
|
|
||||||
if (i == 2)
|
|
||||||
return 1;
|
|
||||||
if (i == 3)
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
if (player.getName().length() > 16) {
|
|
||||||
return player.getName().substring(0, 16);
|
|
||||||
}
|
|
||||||
return player.getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean a(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,123 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_6_R2;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.lishid.openinv.internal.IAnySilentChest;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_6_R2.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_6_R2.IInventory;
|
|
||||||
import net.minecraft.server.v1_6_R2.InventoryLargeChest;
|
|
||||||
import net.minecraft.server.v1_6_R2.Packet100OpenWindow;
|
|
||||||
import net.minecraft.server.v1_6_R2.TileEntityChest;
|
|
||||||
import net.minecraft.server.v1_6_R2.World;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R2.entity.CraftPlayer;
|
|
||||||
|
|
||||||
public class AnySilentChest implements IAnySilentChest {
|
|
||||||
@Override
|
|
||||||
public boolean isAnyChestNeeded(Player p, int x, int y, int z) {
|
|
||||||
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
// If block on top
|
|
||||||
if (world.t(x, y + 1, z))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
int id = world.getTypeId(x, y, z);
|
|
||||||
|
|
||||||
// If block next to chest is chest and has a block on top
|
|
||||||
if ((world.getTypeId(x - 1, y, z) == id) && (world.t(x - 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x + 1, y, z) == id) && (world.t(x + 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z - 1) == id) && (world.t(x, y + 1, z - 1)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z + 1) == id) && (world.t(x, y + 1, z + 1)))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean activateChest(Player p, boolean anychest, boolean silentchest, int x, int y, int z) {
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
Object chest = world.getTileEntity(x, y, z);
|
|
||||||
if (chest == null)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
int id = world.getTypeId(x, y, z);
|
|
||||||
|
|
||||||
if (!anychest) {
|
|
||||||
if (world.t(x, y + 1, z))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x - 1, y, z) == id) && (world.t(x - 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x + 1, y, z) == id) && (world.t(x + 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z - 1) == id) && (world.t(x, y + 1, z - 1)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z + 1) == id) && (world.t(x, y + 1, z + 1)))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (world.getTypeId(x - 1, y, z) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x - 1, y, z), (IInventory) chest);
|
|
||||||
if (world.getTypeId(x + 1, y, z) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x + 1, y, z));
|
|
||||||
if (world.getTypeId(x, y, z - 1) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x, y, z - 1), (IInventory) chest);
|
|
||||||
if (world.getTypeId(x, y, z + 1) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x, y, z + 1));
|
|
||||||
|
|
||||||
boolean returnValue = true;
|
|
||||||
if (!silentchest) {
|
|
||||||
player.openContainer((IInventory) chest);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
try {
|
|
||||||
int windowId = 0;
|
|
||||||
try {
|
|
||||||
Field windowID = player.getClass().getDeclaredField("containerCounter");
|
|
||||||
windowID.setAccessible(true);
|
|
||||||
windowId = windowID.getInt(player);
|
|
||||||
windowId = windowId % 100 + 1;
|
|
||||||
windowID.setInt(player, windowId);
|
|
||||||
}
|
|
||||||
catch (NoSuchFieldException e) {}
|
|
||||||
|
|
||||||
player.playerConnection.sendPacket(new Packet100OpenWindow(windowId, 0, ((IInventory) chest).getName(), ((IInventory) chest).getSize(), true));
|
|
||||||
player.activeContainer = new SilentContainerChest(player.inventory, ((IInventory) chest));
|
|
||||||
player.activeContainer.windowId = windowId;
|
|
||||||
player.activeContainer.addSlotListener(player);
|
|
||||||
returnValue = false;
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
p.sendMessage(ChatColor.RED + "Error while sending silent chest.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_6_R2;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.Permissions;
|
|
||||||
import com.lishid.openinv.internal.IInventoryAccess;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_6_R2.IInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R2.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class InventoryAccess implements IInventoryAccess {
|
|
||||||
@Override
|
|
||||||
public boolean check(Inventory inventory, HumanEntity player) {
|
|
||||||
IInventory inv = ((CraftInventory) inventory).getInventory();
|
|
||||||
|
|
||||||
if (inv instanceof SpecialPlayerInventory) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITINV)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (inv instanceof SpecialEnderChest) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITENDER)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_6_R2;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.OfflinePlayer;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_6_R2.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_6_R2.MinecraftServer;
|
|
||||||
import net.minecraft.server.v1_6_R2.PlayerInteractManager;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R2.CraftServer;
|
|
||||||
|
|
||||||
public class PlayerDataManager extends com.lishid.openinv.internal.PlayerDataManager {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Player loadOfflinePlayer(OfflinePlayer offline) {
|
|
||||||
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
|
|
||||||
|
|
||||||
// Create an entity to load the player data
|
|
||||||
EntityPlayer entity = new EntityPlayer(server, server.getWorldServer(0), offline.getName(), new PlayerInteractManager(server.getWorldServer(0)));
|
|
||||||
|
|
||||||
// Get the bukkit entity
|
|
||||||
Player target = (entity == null) ? null : entity.getBukkitEntity();
|
|
||||||
if (target != null) {
|
|
||||||
// Load data
|
|
||||||
target.loadData();
|
|
||||||
// Return the entity
|
|
||||||
return target;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPlayerDataID(OfflinePlayer player) {
|
|
||||||
return player.getName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_6_R2;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_6_R2.ContainerChest;
|
|
||||||
import net.minecraft.server.v1_6_R2.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_6_R2.IInventory;
|
|
||||||
|
|
||||||
public class SilentContainerChest extends ContainerChest {
|
|
||||||
public IInventory inv;
|
|
||||||
|
|
||||||
public SilentContainerChest(IInventory i1, IInventory i2) {
|
|
||||||
super(i1, i2);
|
|
||||||
inv = i2;
|
|
||||||
// close signal
|
|
||||||
inv.g();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(EntityHuman paramEntityHuman) {
|
|
||||||
// Don't send close signal twice, might screw up
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,150 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_6_R2;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialEnderChest;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_6_R2.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_6_R2.IInventory;
|
|
||||||
import net.minecraft.server.v1_6_R2.InventoryEnderChest;
|
|
||||||
import net.minecraft.server.v1_6_R2.InventorySubcontainer;
|
|
||||||
import net.minecraft.server.v1_6_R2.ItemStack;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R2.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R2.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R2.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final InventoryEnderChest enderChest;
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
|
|
||||||
public boolean playerOnline = false;
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private int maxStack = MAX_STACK;
|
|
||||||
|
|
||||||
public SpecialEnderChest(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle().getEnderChest().getName(), ((CraftPlayer) p).getHandle().getEnderChest().c(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
|
|
||||||
this.plugin = plugin;
|
|
||||||
CraftPlayer player = (CraftPlayer) p;
|
|
||||||
this.enderChest = player.getHandle().getEnderChest();
|
|
||||||
this.owner = player;
|
|
||||||
this.items = enderChest.getContents();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
try {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
|
|
||||||
Field field = playerEnderChest.getClass().getField("items");
|
|
||||||
field.setAccessible(true);
|
|
||||||
field.set(playerEnderChest, this.items);
|
|
||||||
}
|
|
||||||
catch (Exception e) {}
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
return this.items;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onOpen(CraftHumanEntity who) {
|
|
||||||
transaction.add(who);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
transaction.remove(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<HumanEntity> getViewers() {
|
|
||||||
return transaction;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InventoryHolder getOwner() {
|
|
||||||
return this.owner;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setMaxStackSize(int size) {
|
|
||||||
maxStack = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxStackSize() {
|
|
||||||
return maxStack;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean a(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void startOpen() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void f() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update() {
|
|
||||||
enderChest.update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,260 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_6_R2;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_6_R2.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_6_R2.ItemStack;
|
|
||||||
import net.minecraft.server.v1_6_R2.PlayerInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R2.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R2.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R2.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final ItemStack[] extra = new ItemStack[5];
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private boolean playerOnline = false;
|
|
||||||
|
|
||||||
public SpecialPlayerInventory(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle());
|
|
||||||
this.plugin = plugin;
|
|
||||||
this.owner = ((CraftPlayer) p);
|
|
||||||
this.playerOnline = online;
|
|
||||||
this.items = player.inventory.items;
|
|
||||||
this.armor = player.inventory.armor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
this.player = owner.getHandle();
|
|
||||||
this.player.inventory.items = this.items;
|
|
||||||
this.player.inventory.armor = this.armor;
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return this.inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
super.onClose(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
ItemStack[] C = new ItemStack[getSize()];
|
|
||||||
System.arraycopy(items, 0, C, 0, items.length);
|
|
||||||
System.arraycopy(items, 0, C, items.length, armor.length);
|
|
||||||
return C;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getSize() {
|
|
||||||
return super.getSize() + 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getItem(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
return is[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitStack(int i, int j) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack;
|
|
||||||
|
|
||||||
if (is[i].count <= j) {
|
|
||||||
itemstack = is[i];
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
itemstack = is[i].a(j);
|
|
||||||
if (is[i].count == 0) {
|
|
||||||
is[i] = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitWithoutUpdate(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack = is[i];
|
|
||||||
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setItem(int i, ItemStack itemstack) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Effects
|
|
||||||
if (is == this.extra) {
|
|
||||||
owner.getHandle().drop(itemstack);
|
|
||||||
itemstack = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
is[i] = itemstack;
|
|
||||||
|
|
||||||
owner.getHandle().defaultContainer.b();
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedItemSlotNum(int i) {
|
|
||||||
if (i >= 27)
|
|
||||||
return i - 27;
|
|
||||||
else
|
|
||||||
return i + 9;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedArmorSlotNum(int i) {
|
|
||||||
if (i == 0)
|
|
||||||
return 3;
|
|
||||||
if (i == 1)
|
|
||||||
return 2;
|
|
||||||
if (i == 2)
|
|
||||||
return 1;
|
|
||||||
if (i == 3)
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
if (player.getName().length() > 16) {
|
|
||||||
return player.getName().substring(0, 16);
|
|
||||||
}
|
|
||||||
return player.getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean a(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,123 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_6_R3;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.lishid.openinv.internal.IAnySilentChest;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_6_R3.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_6_R3.IInventory;
|
|
||||||
import net.minecraft.server.v1_6_R3.InventoryLargeChest;
|
|
||||||
import net.minecraft.server.v1_6_R3.Packet100OpenWindow;
|
|
||||||
import net.minecraft.server.v1_6_R3.TileEntityChest;
|
|
||||||
import net.minecraft.server.v1_6_R3.World;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer;
|
|
||||||
|
|
||||||
public class AnySilentChest implements IAnySilentChest {
|
|
||||||
@Override
|
|
||||||
public boolean isAnyChestNeeded(Player p, int x, int y, int z) {
|
|
||||||
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
// If block on top
|
|
||||||
if (world.t(x, y + 1, z))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
int id = world.getTypeId(x, y, z);
|
|
||||||
|
|
||||||
// If block next to chest is chest and has a block on top
|
|
||||||
if ((world.getTypeId(x - 1, y, z) == id) && (world.t(x - 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x + 1, y, z) == id) && (world.t(x + 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z - 1) == id) && (world.t(x, y + 1, z - 1)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z + 1) == id) && (world.t(x, y + 1, z + 1)))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean activateChest(Player p, boolean anychest, boolean silentchest, int x, int y, int z) {
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
Object chest = world.getTileEntity(x, y, z);
|
|
||||||
if (chest == null)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
int id = world.getTypeId(x, y, z);
|
|
||||||
|
|
||||||
if (!anychest) {
|
|
||||||
if (world.t(x, y + 1, z))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x - 1, y, z) == id) && (world.t(x - 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x + 1, y, z) == id) && (world.t(x + 1, y + 1, z)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z - 1) == id) && (world.t(x, y + 1, z - 1)))
|
|
||||||
return true;
|
|
||||||
if ((world.getTypeId(x, y, z + 1) == id) && (world.t(x, y + 1, z + 1)))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (world.getTypeId(x - 1, y, z) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x - 1, y, z), (IInventory) chest);
|
|
||||||
if (world.getTypeId(x + 1, y, z) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x + 1, y, z));
|
|
||||||
if (world.getTypeId(x, y, z - 1) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x, y, z - 1), (IInventory) chest);
|
|
||||||
if (world.getTypeId(x, y, z + 1) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x, y, z + 1));
|
|
||||||
|
|
||||||
boolean returnValue = true;
|
|
||||||
if (!silentchest) {
|
|
||||||
player.openContainer((IInventory) chest);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
try {
|
|
||||||
int windowId = 0;
|
|
||||||
try {
|
|
||||||
Field windowID = player.getClass().getDeclaredField("containerCounter");
|
|
||||||
windowID.setAccessible(true);
|
|
||||||
windowId = windowID.getInt(player);
|
|
||||||
windowId = windowId % 100 + 1;
|
|
||||||
windowID.setInt(player, windowId);
|
|
||||||
}
|
|
||||||
catch (NoSuchFieldException e) {}
|
|
||||||
|
|
||||||
player.playerConnection.sendPacket(new Packet100OpenWindow(windowId, 0, ((IInventory) chest).getName(), ((IInventory) chest).getSize(), true));
|
|
||||||
player.activeContainer = new SilentContainerChest(player.inventory, ((IInventory) chest));
|
|
||||||
player.activeContainer.windowId = windowId;
|
|
||||||
player.activeContainer.addSlotListener(player);
|
|
||||||
returnValue = false;
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
p.sendMessage(ChatColor.RED + "Error while sending silent chest.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_6_R3;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.Permissions;
|
|
||||||
import com.lishid.openinv.internal.IInventoryAccess;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_6_R3.IInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R3.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class InventoryAccess implements IInventoryAccess {
|
|
||||||
@Override
|
|
||||||
public boolean check(Inventory inventory, HumanEntity player) {
|
|
||||||
IInventory inv = ((CraftInventory) inventory).getInventory();
|
|
||||||
|
|
||||||
if (inv instanceof SpecialPlayerInventory) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITINV)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (inv instanceof SpecialEnderChest) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITENDER)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_6_R3;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.OfflinePlayer;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_6_R3.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_6_R3.MinecraftServer;
|
|
||||||
import net.minecraft.server.v1_6_R3.PlayerInteractManager;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R3.CraftServer;
|
|
||||||
|
|
||||||
public class PlayerDataManager extends com.lishid.openinv.internal.PlayerDataManager {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Player loadOfflinePlayer(OfflinePlayer offline) {
|
|
||||||
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
|
|
||||||
|
|
||||||
// Create an entity to load the player data
|
|
||||||
EntityPlayer entity = new EntityPlayer(server, server.getWorldServer(0), offline.getName(), new PlayerInteractManager(server.getWorldServer(0)));
|
|
||||||
|
|
||||||
// Get the bukkit entity
|
|
||||||
Player target = (entity == null) ? null : entity.getBukkitEntity();
|
|
||||||
if (target != null) {
|
|
||||||
// Load data
|
|
||||||
target.loadData();
|
|
||||||
// Return the entity
|
|
||||||
return target;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPlayerDataID(OfflinePlayer player) {
|
|
||||||
return player.getName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_6_R3;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_6_R3.ContainerChest;
|
|
||||||
import net.minecraft.server.v1_6_R3.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_6_R3.IInventory;
|
|
||||||
|
|
||||||
public class SilentContainerChest extends ContainerChest {
|
|
||||||
public IInventory inv;
|
|
||||||
|
|
||||||
public SilentContainerChest(IInventory i1, IInventory i2) {
|
|
||||||
super(i1, i2);
|
|
||||||
inv = i2;
|
|
||||||
// close signal
|
|
||||||
inv.g();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(EntityHuman paramEntityHuman) {
|
|
||||||
// Don't send close signal twice, might screw up
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,150 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_6_R3;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialEnderChest;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_6_R3.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_6_R3.IInventory;
|
|
||||||
import net.minecraft.server.v1_6_R3.InventoryEnderChest;
|
|
||||||
import net.minecraft.server.v1_6_R3.InventorySubcontainer;
|
|
||||||
import net.minecraft.server.v1_6_R3.ItemStack;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R3.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final InventoryEnderChest enderChest;
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
|
|
||||||
public boolean playerOnline = false;
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private int maxStack = MAX_STACK;
|
|
||||||
|
|
||||||
public SpecialEnderChest(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle().getEnderChest().getName(), ((CraftPlayer) p).getHandle().getEnderChest().c(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
|
|
||||||
this.plugin = plugin;
|
|
||||||
CraftPlayer player = (CraftPlayer) p;
|
|
||||||
this.enderChest = player.getHandle().getEnderChest();
|
|
||||||
this.owner = player;
|
|
||||||
this.items = enderChest.getContents();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
try {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
|
|
||||||
Field field = playerEnderChest.getClass().getField("items");
|
|
||||||
field.setAccessible(true);
|
|
||||||
field.set(playerEnderChest, this.items);
|
|
||||||
}
|
|
||||||
catch (Exception e) {}
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
return this.items;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onOpen(CraftHumanEntity who) {
|
|
||||||
transaction.add(who);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
transaction.remove(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<HumanEntity> getViewers() {
|
|
||||||
return transaction;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InventoryHolder getOwner() {
|
|
||||||
return this.owner;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setMaxStackSize(int size) {
|
|
||||||
maxStack = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxStackSize() {
|
|
||||||
return maxStack;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean a(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void startOpen() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void f() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update() {
|
|
||||||
enderChest.update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,260 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_6_R3;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_6_R3.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_6_R3.ItemStack;
|
|
||||||
import net.minecraft.server.v1_6_R3.PlayerInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_6_R3.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final ItemStack[] extra = new ItemStack[5];
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private boolean playerOnline = false;
|
|
||||||
|
|
||||||
public SpecialPlayerInventory(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle());
|
|
||||||
this.plugin = plugin;
|
|
||||||
this.owner = ((CraftPlayer) p);
|
|
||||||
this.playerOnline = online;
|
|
||||||
this.items = player.inventory.items;
|
|
||||||
this.armor = player.inventory.armor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
this.player = owner.getHandle();
|
|
||||||
this.player.inventory.items = this.items;
|
|
||||||
this.player.inventory.armor = this.armor;
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return this.inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
super.onClose(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
ItemStack[] C = new ItemStack[getSize()];
|
|
||||||
System.arraycopy(items, 0, C, 0, items.length);
|
|
||||||
System.arraycopy(items, 0, C, items.length, armor.length);
|
|
||||||
return C;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getSize() {
|
|
||||||
return super.getSize() + 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getItem(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
return is[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitStack(int i, int j) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack;
|
|
||||||
|
|
||||||
if (is[i].count <= j) {
|
|
||||||
itemstack = is[i];
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
itemstack = is[i].a(j);
|
|
||||||
if (is[i].count == 0) {
|
|
||||||
is[i] = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitWithoutUpdate(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack = is[i];
|
|
||||||
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setItem(int i, ItemStack itemstack) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Effects
|
|
||||||
if (is == this.extra) {
|
|
||||||
owner.getHandle().drop(itemstack);
|
|
||||||
itemstack = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
is[i] = itemstack;
|
|
||||||
|
|
||||||
owner.getHandle().defaultContainer.b();
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedItemSlotNum(int i) {
|
|
||||||
if (i >= 27)
|
|
||||||
return i - 27;
|
|
||||||
else
|
|
||||||
return i + 9;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedArmorSlotNum(int i) {
|
|
||||||
if (i == 0)
|
|
||||||
return 3;
|
|
||||||
if (i == 1)
|
|
||||||
return 2;
|
|
||||||
if (i == 2)
|
|
||||||
return 1;
|
|
||||||
if (i == 3)
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
if (player.getName().length() > 16) {
|
|
||||||
return player.getName().substring(0, 16);
|
|
||||||
}
|
|
||||||
return player.getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean a(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,124 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_7_R1;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.lishid.openinv.internal.IAnySilentChest;
|
|
||||||
|
|
||||||
//Volatile
|
|
||||||
import net.minecraft.server.v1_7_R1.Block;
|
|
||||||
import net.minecraft.server.v1_7_R1.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_7_R1.IInventory;
|
|
||||||
import net.minecraft.server.v1_7_R1.InventoryLargeChest;
|
|
||||||
import net.minecraft.server.v1_7_R1.PacketPlayOutOpenWindow;
|
|
||||||
import net.minecraft.server.v1_7_R1.TileEntityChest;
|
|
||||||
import net.minecraft.server.v1_7_R1.World;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftPlayer;
|
|
||||||
|
|
||||||
public class AnySilentChest implements IAnySilentChest {
|
|
||||||
@Override
|
|
||||||
public boolean isAnyChestNeeded(Player p, int x, int y, int z) {
|
|
||||||
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
// If block on top
|
|
||||||
if (world.getType(x, y + 1, z).c())
|
|
||||||
return true;
|
|
||||||
|
|
||||||
int id = Block.b(world.getType(x, y, z));
|
|
||||||
|
|
||||||
// If block next to chest is chest and has a block on top
|
|
||||||
if ((Block.b(world.getType(x - 1, y, z)) == id) && (world.getType(x - 1, y + 1, z).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x + 1, y, z)) == id) && (world.getType(x + 1, y + 1, z).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x, y, z - 1)) == id) && (world.getType(x, y + 1, z - 1).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x, y, z + 1)) == id) && (world.getType(x, y + 1, z + 1).c()))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean activateChest(Player p, boolean anychest, boolean silentchest, int x, int y, int z) {
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
Object chest = world.getTileEntity(x, y, z);
|
|
||||||
if (chest == null)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
int id = Block.b(world.getType(x, y, z));
|
|
||||||
|
|
||||||
if (!anychest) {
|
|
||||||
if (world.getType(x, y + 1, z).c())
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x - 1, y, z)) == id) && (world.getType(x - 1, y + 1, z).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x + 1, y, z)) == id) && (world.getType(x + 1, y + 1, z).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x, y, z - 1)) == id) && (world.getType(x, y + 1, z - 1).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x, y, z + 1)) == id) && (world.getType(x, y + 1, z + 1).c()))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Block.b(world.getType(x - 1, y, z)) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x - 1, y, z), (IInventory) chest);
|
|
||||||
if (Block.b(world.getType(x + 1, y, z)) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x + 1, y, z));
|
|
||||||
if (Block.b(world.getType(x, y, z - 1)) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x, y, z - 1), (IInventory) chest);
|
|
||||||
if (Block.b(world.getType(x, y, z + 1)) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x, y, z + 1));
|
|
||||||
|
|
||||||
boolean returnValue = true;
|
|
||||||
if (!silentchest) {
|
|
||||||
player.openContainer((IInventory) chest);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
try {
|
|
||||||
int windowId = 0;
|
|
||||||
try {
|
|
||||||
Field windowID = player.getClass().getDeclaredField("containerCounter");
|
|
||||||
windowID.setAccessible(true);
|
|
||||||
windowId = windowID.getInt(player);
|
|
||||||
windowId = windowId % 100 + 1;
|
|
||||||
windowID.setInt(player, windowId);
|
|
||||||
}
|
|
||||||
catch (NoSuchFieldException e) {}
|
|
||||||
|
|
||||||
player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, 0, ((IInventory) chest).getInventoryName(), ((IInventory) chest).getSize(), true));
|
|
||||||
player.activeContainer = new SilentContainerChest(player.inventory, ((IInventory) chest));
|
|
||||||
player.activeContainer.windowId = windowId;
|
|
||||||
player.activeContainer.addSlotListener(player);
|
|
||||||
returnValue = false;
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
p.sendMessage(ChatColor.RED + "Error while sending silent chest.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_7_R1;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.Permissions;
|
|
||||||
import com.lishid.openinv.internal.IInventoryAccess;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_7_R1.IInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class InventoryAccess implements IInventoryAccess {
|
|
||||||
@Override
|
|
||||||
public boolean check(Inventory inventory, HumanEntity player) {
|
|
||||||
IInventory inv = ((CraftInventory) inventory).getInventory();
|
|
||||||
|
|
||||||
if (inv instanceof SpecialPlayerInventory) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITINV)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (inv instanceof SpecialEnderChest) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITENDER)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_7_R1;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.OfflinePlayer;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_7_R1.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_7_R1.MinecraftServer;
|
|
||||||
import net.minecraft.server.v1_7_R1.PlayerInteractManager;
|
|
||||||
import net.minecraft.util.com.mojang.authlib.GameProfile;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.CraftServer;
|
|
||||||
|
|
||||||
public class PlayerDataManager extends com.lishid.openinv.internal.PlayerDataManager {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Player loadOfflinePlayer(OfflinePlayer offline) {
|
|
||||||
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
|
|
||||||
|
|
||||||
GameProfile profile = new GameProfile(null, offline.getName());
|
|
||||||
// Create an entity to load the player data
|
|
||||||
EntityPlayer entity = new EntityPlayer(server, server.getWorldServer(0), profile, new PlayerInteractManager(server.getWorldServer(0)));
|
|
||||||
|
|
||||||
// Get the bukkit entity
|
|
||||||
Player target = (entity == null) ? null : entity.getBukkitEntity();
|
|
||||||
if (target != null) {
|
|
||||||
// Load data
|
|
||||||
target.loadData();
|
|
||||||
// Return the entity
|
|
||||||
return target;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPlayerDataID(OfflinePlayer player) {
|
|
||||||
return player.getName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_7_R1;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_7_R1.ContainerChest;
|
|
||||||
import net.minecraft.server.v1_7_R1.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_7_R1.IInventory;
|
|
||||||
|
|
||||||
public class SilentContainerChest extends ContainerChest {
|
|
||||||
public IInventory inv;
|
|
||||||
|
|
||||||
public SilentContainerChest(IInventory i1, IInventory i2) {
|
|
||||||
super(i1, i2);
|
|
||||||
inv = i2;
|
|
||||||
// close signal
|
|
||||||
inv.l_();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(EntityHuman paramEntityHuman) {
|
|
||||||
// Don't send close signal twice, might screw up
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,150 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_7_R1;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialEnderChest;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_7_R1.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_7_R1.IInventory;
|
|
||||||
import net.minecraft.server.v1_7_R1.InventoryEnderChest;
|
|
||||||
import net.minecraft.server.v1_7_R1.InventorySubcontainer;
|
|
||||||
import net.minecraft.server.v1_7_R1.ItemStack;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final InventoryEnderChest enderChest;
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
|
|
||||||
public boolean playerOnline = false;
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private int maxStack = MAX_STACK;
|
|
||||||
|
|
||||||
public SpecialEnderChest(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle().getEnderChest().getInventoryName(), ((CraftPlayer) p).getHandle().getEnderChest().k_(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
|
|
||||||
this.plugin = plugin;
|
|
||||||
CraftPlayer player = (CraftPlayer) p;
|
|
||||||
this.enderChest = player.getHandle().getEnderChest();
|
|
||||||
this.owner = player;
|
|
||||||
this.items = enderChest.getContents();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
try {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
|
|
||||||
Field field = playerEnderChest.getClass().getField("items");
|
|
||||||
field.setAccessible(true);
|
|
||||||
field.set(playerEnderChest, this.items);
|
|
||||||
}
|
|
||||||
catch (Exception e) {}
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
return this.items;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onOpen(CraftHumanEntity who) {
|
|
||||||
transaction.add(who);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
transaction.remove(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<HumanEntity> getViewers() {
|
|
||||||
return transaction;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InventoryHolder getOwner() {
|
|
||||||
return this.owner;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setMaxStackSize(int size) {
|
|
||||||
maxStack = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxStackSize() {
|
|
||||||
return maxStack;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean a(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void startOpen() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void f() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update() {
|
|
||||||
enderChest.update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,260 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_7_R1;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_7_R1.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_7_R1.ItemStack;
|
|
||||||
import net.minecraft.server.v1_7_R1.PlayerInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R1.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final ItemStack[] extra = new ItemStack[5];
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private boolean playerOnline = false;
|
|
||||||
|
|
||||||
public SpecialPlayerInventory(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle());
|
|
||||||
this.plugin = plugin;
|
|
||||||
this.owner = ((CraftPlayer) p);
|
|
||||||
this.playerOnline = online;
|
|
||||||
this.items = player.inventory.items;
|
|
||||||
this.armor = player.inventory.armor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
this.player = owner.getHandle();
|
|
||||||
this.player.inventory.items = this.items;
|
|
||||||
this.player.inventory.armor = this.armor;
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return this.inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
super.onClose(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
ItemStack[] C = new ItemStack[getSize()];
|
|
||||||
System.arraycopy(items, 0, C, 0, items.length);
|
|
||||||
System.arraycopy(items, 0, C, items.length, armor.length);
|
|
||||||
return C;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getSize() {
|
|
||||||
return super.getSize() + 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getItem(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
return is[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitStack(int i, int j) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack;
|
|
||||||
|
|
||||||
if (is[i].count <= j) {
|
|
||||||
itemstack = is[i];
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
itemstack = is[i].a(j);
|
|
||||||
if (is[i].count == 0) {
|
|
||||||
is[i] = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitWithoutUpdate(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack = is[i];
|
|
||||||
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setItem(int i, ItemStack itemstack) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Effects
|
|
||||||
if (is == this.extra) {
|
|
||||||
owner.getHandle().drop(itemstack, true);
|
|
||||||
itemstack = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
is[i] = itemstack;
|
|
||||||
|
|
||||||
owner.getHandle().defaultContainer.b();
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedItemSlotNum(int i) {
|
|
||||||
if (i >= 27)
|
|
||||||
return i - 27;
|
|
||||||
else
|
|
||||||
return i + 9;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedArmorSlotNum(int i) {
|
|
||||||
if (i == 0)
|
|
||||||
return 3;
|
|
||||||
if (i == 1)
|
|
||||||
return 2;
|
|
||||||
if (i == 2)
|
|
||||||
return 1;
|
|
||||||
if (i == 3)
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getInventoryName() {
|
|
||||||
if (player.getName().length() > 16) {
|
|
||||||
return player.getName().substring(0, 16);
|
|
||||||
}
|
|
||||||
return player.getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean a(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,124 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_7_R2;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.lishid.openinv.internal.IAnySilentChest;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_7_R2.Block;
|
|
||||||
//Volatile
|
|
||||||
import net.minecraft.server.v1_7_R2.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_7_R2.IInventory;
|
|
||||||
import net.minecraft.server.v1_7_R2.InventoryLargeChest;
|
|
||||||
import net.minecraft.server.v1_7_R2.PacketPlayOutOpenWindow;
|
|
||||||
import net.minecraft.server.v1_7_R2.TileEntityChest;
|
|
||||||
import net.minecraft.server.v1_7_R2.World;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftPlayer;
|
|
||||||
|
|
||||||
public class AnySilentChest implements IAnySilentChest {
|
|
||||||
@Override
|
|
||||||
public boolean isAnyChestNeeded(Player p, int x, int y, int z) {
|
|
||||||
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
// If block on top
|
|
||||||
if (world.getType(x, y + 1, z).c())
|
|
||||||
return true;
|
|
||||||
|
|
||||||
int id = Block.b(world.getType(x, y, z));
|
|
||||||
|
|
||||||
// If block next to chest is chest and has a block on top
|
|
||||||
if ((Block.b(world.getType(x - 1, y, z)) == id) && (world.getType(x - 1, y + 1, z).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x + 1, y, z)) == id) && (world.getType(x + 1, y + 1, z).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x, y, z - 1)) == id) && (world.getType(x, y + 1, z - 1).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x, y, z + 1)) == id) && (world.getType(x, y + 1, z + 1).c()))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean activateChest(Player p, boolean anychest, boolean silentchest, int x, int y, int z) {
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
Object chest = world.getTileEntity(x, y, z);
|
|
||||||
if (chest == null)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
int id = Block.b(world.getType(x, y, z));
|
|
||||||
|
|
||||||
if (!anychest) {
|
|
||||||
if (world.getType(x, y + 1, z).c())
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x - 1, y, z)) == id) && (world.getType(x - 1, y + 1, z).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x + 1, y, z)) == id) && (world.getType(x + 1, y + 1, z).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x, y, z - 1)) == id) && (world.getType(x, y + 1, z - 1).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x, y, z + 1)) == id) && (world.getType(x, y + 1, z + 1).c()))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Block.b(world.getType(x - 1, y, z)) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x - 1, y, z), (IInventory) chest);
|
|
||||||
if (Block.b(world.getType(x + 1, y, z)) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x + 1, y, z));
|
|
||||||
if (Block.b(world.getType(x, y, z - 1)) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x, y, z - 1), (IInventory) chest);
|
|
||||||
if (Block.b(world.getType(x, y, z + 1)) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x, y, z + 1));
|
|
||||||
|
|
||||||
boolean returnValue = true;
|
|
||||||
if (!silentchest) {
|
|
||||||
player.openContainer((IInventory) chest);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
try {
|
|
||||||
int windowId = 0;
|
|
||||||
try {
|
|
||||||
Field windowID = player.getClass().getDeclaredField("containerCounter");
|
|
||||||
windowID.setAccessible(true);
|
|
||||||
windowId = windowID.getInt(player);
|
|
||||||
windowId = windowId % 100 + 1;
|
|
||||||
windowID.setInt(player, windowId);
|
|
||||||
}
|
|
||||||
catch (NoSuchFieldException e) {}
|
|
||||||
|
|
||||||
player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, 0, ((IInventory) chest).getInventoryName(), ((IInventory) chest).getSize(), true));
|
|
||||||
player.activeContainer = new SilentContainerChest(player.inventory, ((IInventory) chest));
|
|
||||||
player.activeContainer.windowId = windowId;
|
|
||||||
player.activeContainer.addSlotListener(player);
|
|
||||||
returnValue = false;
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
p.sendMessage(ChatColor.RED + "Error while sending silent chest.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_7_R2;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.Permissions;
|
|
||||||
import com.lishid.openinv.internal.IInventoryAccess;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_7_R2.IInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class InventoryAccess implements IInventoryAccess {
|
|
||||||
@Override
|
|
||||||
public boolean check(Inventory inventory, HumanEntity player) {
|
|
||||||
IInventory inv = ((CraftInventory) inventory).getInventory();
|
|
||||||
|
|
||||||
if (inv instanceof SpecialPlayerInventory) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITINV)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (inv instanceof SpecialEnderChest) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITENDER)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_7_R2;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.OfflinePlayer;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
//Volatile
|
|
||||||
import net.minecraft.server.v1_7_R2.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_7_R2.MinecraftServer;
|
|
||||||
import net.minecraft.server.v1_7_R2.PlayerInteractManager;
|
|
||||||
import net.minecraft.util.com.mojang.authlib.GameProfile;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.CraftServer;
|
|
||||||
|
|
||||||
public class PlayerDataManager extends com.lishid.openinv.internal.PlayerDataManager {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Player loadOfflinePlayer(OfflinePlayer offline) {
|
|
||||||
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
|
|
||||||
|
|
||||||
GameProfile profile = new GameProfile(null, offline.getName());
|
|
||||||
// Create an entity to load the player data
|
|
||||||
EntityPlayer entity = new EntityPlayer(server, server.getWorldServer(0), profile, new PlayerInteractManager(server.getWorldServer(0)));
|
|
||||||
|
|
||||||
// Get the bukkit entity
|
|
||||||
Player target = (entity == null) ? null : entity.getBukkitEntity();
|
|
||||||
if (target != null) {
|
|
||||||
// Load data
|
|
||||||
target.loadData();
|
|
||||||
// Return the entity
|
|
||||||
return target;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPlayerDataID(OfflinePlayer player) {
|
|
||||||
return player.getName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_7_R2;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_7_R2.ContainerChest;
|
|
||||||
import net.minecraft.server.v1_7_R2.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_7_R2.IInventory;
|
|
||||||
|
|
||||||
public class SilentContainerChest extends ContainerChest {
|
|
||||||
public IInventory inv;
|
|
||||||
|
|
||||||
public SilentContainerChest(IInventory i1, IInventory i2) {
|
|
||||||
super(i1, i2);
|
|
||||||
inv = i2;
|
|
||||||
// close signal
|
|
||||||
inv.l_();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(EntityHuman paramEntityHuman) {
|
|
||||||
// Don't send close signal twice, might screw up
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,150 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_7_R2;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialEnderChest;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_7_R2.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_7_R2.IInventory;
|
|
||||||
import net.minecraft.server.v1_7_R2.InventoryEnderChest;
|
|
||||||
import net.minecraft.server.v1_7_R2.InventorySubcontainer;
|
|
||||||
import net.minecraft.server.v1_7_R2.ItemStack;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final InventoryEnderChest enderChest;
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
|
|
||||||
public boolean playerOnline = false;
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private int maxStack = MAX_STACK;
|
|
||||||
|
|
||||||
public SpecialEnderChest(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle().getEnderChest().getInventoryName(), ((CraftPlayer) p).getHandle().getEnderChest().k_(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
|
|
||||||
this.plugin = plugin;
|
|
||||||
CraftPlayer player = (CraftPlayer) p;
|
|
||||||
this.enderChest = player.getHandle().getEnderChest();
|
|
||||||
this.owner = player;
|
|
||||||
this.items = enderChest.getContents();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
try {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
|
|
||||||
Field field = playerEnderChest.getClass().getField("items");
|
|
||||||
field.setAccessible(true);
|
|
||||||
field.set(playerEnderChest, this.items);
|
|
||||||
}
|
|
||||||
catch (Exception e) {}
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
return this.items;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onOpen(CraftHumanEntity who) {
|
|
||||||
transaction.add(who);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
transaction.remove(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<HumanEntity> getViewers() {
|
|
||||||
return transaction;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InventoryHolder getOwner() {
|
|
||||||
return this.owner;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setMaxStackSize(int size) {
|
|
||||||
maxStack = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxStackSize() {
|
|
||||||
return maxStack;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean a(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void startOpen() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void f() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update() {
|
|
||||||
enderChest.update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,260 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_7_R2;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_7_R2.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_7_R2.ItemStack;
|
|
||||||
import net.minecraft.server.v1_7_R2.PlayerInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R2.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final ItemStack[] extra = new ItemStack[5];
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private boolean playerOnline = false;
|
|
||||||
|
|
||||||
public SpecialPlayerInventory(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle());
|
|
||||||
this.plugin = plugin;
|
|
||||||
this.owner = ((CraftPlayer) p);
|
|
||||||
this.playerOnline = online;
|
|
||||||
this.items = player.inventory.items;
|
|
||||||
this.armor = player.inventory.armor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
this.player = owner.getHandle();
|
|
||||||
this.player.inventory.items = this.items;
|
|
||||||
this.player.inventory.armor = this.armor;
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return this.inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
super.onClose(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
ItemStack[] C = new ItemStack[getSize()];
|
|
||||||
System.arraycopy(items, 0, C, 0, items.length);
|
|
||||||
System.arraycopy(items, 0, C, items.length, armor.length);
|
|
||||||
return C;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getSize() {
|
|
||||||
return super.getSize() + 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getItem(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
return is[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitStack(int i, int j) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack;
|
|
||||||
|
|
||||||
if (is[i].count <= j) {
|
|
||||||
itemstack = is[i];
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
itemstack = is[i].a(j);
|
|
||||||
if (is[i].count == 0) {
|
|
||||||
is[i] = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitWithoutUpdate(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack = is[i];
|
|
||||||
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setItem(int i, ItemStack itemstack) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Effects
|
|
||||||
if (is == this.extra) {
|
|
||||||
owner.getHandle().drop(itemstack, true);
|
|
||||||
itemstack = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
is[i] = itemstack;
|
|
||||||
|
|
||||||
owner.getHandle().defaultContainer.b();
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedItemSlotNum(int i) {
|
|
||||||
if (i >= 27)
|
|
||||||
return i - 27;
|
|
||||||
else
|
|
||||||
return i + 9;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedArmorSlotNum(int i) {
|
|
||||||
if (i == 0)
|
|
||||||
return 3;
|
|
||||||
if (i == 1)
|
|
||||||
return 2;
|
|
||||||
if (i == 2)
|
|
||||||
return 1;
|
|
||||||
if (i == 3)
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getInventoryName() {
|
|
||||||
if (player.getName().length() > 16) {
|
|
||||||
return player.getName().substring(0, 16);
|
|
||||||
}
|
|
||||||
return player.getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean a(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,124 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_7_R3;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.lishid.openinv.internal.IAnySilentChest;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_7_R3.Block;
|
|
||||||
import net.minecraft.server.v1_7_R3.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_7_R3.IInventory;
|
|
||||||
import net.minecraft.server.v1_7_R3.InventoryLargeChest;
|
|
||||||
import net.minecraft.server.v1_7_R3.PacketPlayOutOpenWindow;
|
|
||||||
import net.minecraft.server.v1_7_R3.TileEntityChest;
|
|
||||||
import net.minecraft.server.v1_7_R3.World;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftPlayer;
|
|
||||||
|
|
||||||
public class AnySilentChest implements IAnySilentChest {
|
|
||||||
@Override
|
|
||||||
public boolean isAnyChestNeeded(Player p, int x, int y, int z) {
|
|
||||||
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
// If block on top
|
|
||||||
if (world.getType(x, y + 1, z).c())
|
|
||||||
return true;
|
|
||||||
|
|
||||||
int id = Block.b(world.getType(x, y, z));
|
|
||||||
|
|
||||||
// If block next to chest is chest and has a block on top
|
|
||||||
if ((Block.b(world.getType(x - 1, y, z)) == id) && (world.getType(x - 1, y + 1, z).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x + 1, y, z)) == id) && (world.getType(x + 1, y + 1, z).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x, y, z - 1)) == id) && (world.getType(x, y + 1, z - 1).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x, y, z + 1)) == id) && (world.getType(x, y + 1, z + 1).c()))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean activateChest(Player p, boolean anychest, boolean silentchest, int x, int y, int z) {
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
Object chest = world.getTileEntity(x, y, z);
|
|
||||||
if (chest == null)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
int id = Block.b(world.getType(x, y, z));
|
|
||||||
|
|
||||||
if (!anychest) {
|
|
||||||
if (world.getType(x, y + 1, z).c())
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x - 1, y, z)) == id) && (world.getType(x - 1, y + 1, z).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x + 1, y, z)) == id) && (world.getType(x + 1, y + 1, z).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x, y, z - 1)) == id) && (world.getType(x, y + 1, z - 1).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.b(world.getType(x, y, z + 1)) == id) && (world.getType(x, y + 1, z + 1).c()))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Block.b(world.getType(x - 1, y, z)) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x - 1, y, z), (IInventory) chest);
|
|
||||||
if (Block.b(world.getType(x + 1, y, z)) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x + 1, y, z));
|
|
||||||
if (Block.b(world.getType(x, y, z - 1)) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x, y, z - 1), (IInventory) chest);
|
|
||||||
if (Block.b(world.getType(x, y, z + 1)) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x, y, z + 1));
|
|
||||||
|
|
||||||
boolean returnValue = true;
|
|
||||||
if (!silentchest) {
|
|
||||||
player.openContainer((IInventory) chest);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
try {
|
|
||||||
int windowId = 0;
|
|
||||||
try {
|
|
||||||
Field windowID = player.getClass().getDeclaredField("containerCounter");
|
|
||||||
windowID.setAccessible(true);
|
|
||||||
windowId = windowID.getInt(player);
|
|
||||||
windowId = windowId % 100 + 1;
|
|
||||||
windowID.setInt(player, windowId);
|
|
||||||
}
|
|
||||||
catch (NoSuchFieldException e) {}
|
|
||||||
|
|
||||||
player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, 0, ((IInventory) chest).getInventoryName(), ((IInventory) chest).getSize(), true));
|
|
||||||
player.activeContainer = new SilentContainerChest(player.inventory, ((IInventory) chest));
|
|
||||||
player.activeContainer.windowId = windowId;
|
|
||||||
player.activeContainer.addSlotListener(player);
|
|
||||||
returnValue = false;
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
p.sendMessage(ChatColor.RED + "Error while sending silent chest.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_7_R3;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.Permissions;
|
|
||||||
import com.lishid.openinv.internal.IInventoryAccess;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_7_R3.IInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class InventoryAccess implements IInventoryAccess {
|
|
||||||
@Override
|
|
||||||
public boolean check(Inventory inventory, HumanEntity player) {
|
|
||||||
IInventory inv = ((CraftInventory) inventory).getInventory();
|
|
||||||
|
|
||||||
if (inv instanceof SpecialPlayerInventory) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITINV)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (inv instanceof SpecialEnderChest) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITENDER)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_7_R3;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.OfflinePlayer;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_7_R3.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_7_R3.MinecraftServer;
|
|
||||||
import net.minecraft.server.v1_7_R3.PlayerInteractManager;
|
|
||||||
import net.minecraft.util.com.mojang.authlib.GameProfile;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.CraftServer;
|
|
||||||
|
|
||||||
public class PlayerDataManager extends com.lishid.openinv.internal.PlayerDataManager {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Player loadOfflinePlayer(OfflinePlayer offline) {
|
|
||||||
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
|
|
||||||
|
|
||||||
GameProfile profile = new GameProfile(offline.getUniqueId(), offline.getName());
|
|
||||||
// Create an entity to load the player data
|
|
||||||
EntityPlayer entity = new EntityPlayer(server, server.getWorldServer(0), profile, new PlayerInteractManager(server.getWorldServer(0)));
|
|
||||||
|
|
||||||
// Get the bukkit entity
|
|
||||||
Player target = (entity == null) ? null : entity.getBukkitEntity();
|
|
||||||
if (target != null) {
|
|
||||||
// Load data
|
|
||||||
target.loadData();
|
|
||||||
// Return the entity
|
|
||||||
return target;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPlayerDataID(OfflinePlayer player) {
|
|
||||||
return player.getUniqueId().toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_7_R3;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_7_R3.ContainerChest;
|
|
||||||
import net.minecraft.server.v1_7_R3.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_7_R3.IInventory;
|
|
||||||
|
|
||||||
public class SilentContainerChest extends ContainerChest {
|
|
||||||
public IInventory inv;
|
|
||||||
|
|
||||||
public SilentContainerChest(IInventory i1, IInventory i2) {
|
|
||||||
super(i1, i2);
|
|
||||||
inv = i2;
|
|
||||||
// close signal
|
|
||||||
inv.l_();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void b(EntityHuman paramEntityHuman) {
|
|
||||||
// Don't send close signal twice, might screw up
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,150 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_7_R3;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialEnderChest;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_7_R3.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_7_R3.IInventory;
|
|
||||||
import net.minecraft.server.v1_7_R3.InventoryEnderChest;
|
|
||||||
import net.minecraft.server.v1_7_R3.InventorySubcontainer;
|
|
||||||
import net.minecraft.server.v1_7_R3.ItemStack;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final InventoryEnderChest enderChest;
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
|
|
||||||
public boolean playerOnline = false;
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private int maxStack = MAX_STACK;
|
|
||||||
|
|
||||||
public SpecialEnderChest(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle().getEnderChest().getInventoryName(), ((CraftPlayer) p).getHandle().getEnderChest().k_(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
|
|
||||||
this.plugin = plugin;
|
|
||||||
CraftPlayer player = (CraftPlayer) p;
|
|
||||||
this.enderChest = player.getHandle().getEnderChest();
|
|
||||||
this.owner = player;
|
|
||||||
this.items = enderChest.getContents();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
try {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
|
|
||||||
Field field = playerEnderChest.getClass().getField("items");
|
|
||||||
field.setAccessible(true);
|
|
||||||
field.set(playerEnderChest, this.items);
|
|
||||||
}
|
|
||||||
catch (Exception e) {}
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
return this.items;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onOpen(CraftHumanEntity who) {
|
|
||||||
transaction.add(who);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
transaction.remove(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<HumanEntity> getViewers() {
|
|
||||||
return transaction;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InventoryHolder getOwner() {
|
|
||||||
return this.owner;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setMaxStackSize(int size) {
|
|
||||||
maxStack = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxStackSize() {
|
|
||||||
return maxStack;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean a(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void startOpen() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void f() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update() {
|
|
||||||
enderChest.update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,260 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_7_R3;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_7_R3.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_7_R3.ItemStack;
|
|
||||||
import net.minecraft.server.v1_7_R3.PlayerInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftHumanEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftPlayer;
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R3.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
|
|
||||||
|
|
||||||
private final OpenInv plugin;
|
|
||||||
private final ItemStack[] extra = new ItemStack[5];
|
|
||||||
private final CraftInventory inventory = new CraftInventory(this);
|
|
||||||
private CraftPlayer owner;
|
|
||||||
private boolean playerOnline = false;
|
|
||||||
|
|
||||||
public SpecialPlayerInventory(OpenInv plugin, Player p, Boolean online) {
|
|
||||||
super(((CraftPlayer) p).getHandle());
|
|
||||||
this.plugin = plugin;
|
|
||||||
this.owner = ((CraftPlayer) p);
|
|
||||||
this.playerOnline = online;
|
|
||||||
this.items = player.inventory.items;
|
|
||||||
this.armor = player.inventory.armor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Inventory getBukkitInventory() {
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean inventoryRemovalCheck(boolean save) {
|
|
||||||
boolean offline = transaction.isEmpty() && !playerOnline;
|
|
||||||
if (offline && save && !plugin.disableSaving()) {
|
|
||||||
owner.saveData();
|
|
||||||
}
|
|
||||||
return offline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPlayerOnline(Player player) {
|
|
||||||
if (!playerOnline) {
|
|
||||||
owner = (CraftPlayer) player;
|
|
||||||
this.player = owner.getHandle();
|
|
||||||
this.player.inventory.items = this.items;
|
|
||||||
this.player.inventory.armor = this.armor;
|
|
||||||
playerOnline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setPlayerOffline() {
|
|
||||||
playerOnline = false;
|
|
||||||
return this.inventoryRemovalCheck(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClose(CraftHumanEntity who) {
|
|
||||||
super.onClose(who);
|
|
||||||
this.inventoryRemovalCheck(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getContents() {
|
|
||||||
ItemStack[] C = new ItemStack[getSize()];
|
|
||||||
System.arraycopy(items, 0, C, 0, items.length);
|
|
||||||
System.arraycopy(items, 0, C, items.length, armor.length);
|
|
||||||
return C;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getSize() {
|
|
||||||
return super.getSize() + 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getItem(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
return is[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitStack(int i, int j) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack;
|
|
||||||
|
|
||||||
if (is[i].count <= j) {
|
|
||||||
itemstack = is[i];
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
itemstack = is[i].a(j);
|
|
||||||
if (is[i].count == 0) {
|
|
||||||
is[i] = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack splitWithoutUpdate(int i) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is[i] != null) {
|
|
||||||
ItemStack itemstack = is[i];
|
|
||||||
|
|
||||||
is[i] = null;
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setItem(int i, ItemStack itemstack) {
|
|
||||||
ItemStack[] is = this.items;
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.armor;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
i = getReversedItemSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= is.length) {
|
|
||||||
i -= is.length;
|
|
||||||
is = this.extra;
|
|
||||||
}
|
|
||||||
else if (is == this.armor) {
|
|
||||||
i = getReversedArmorSlotNum(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Effects
|
|
||||||
if (is == this.extra) {
|
|
||||||
owner.getHandle().drop(itemstack, true);
|
|
||||||
itemstack = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
is[i] = itemstack;
|
|
||||||
|
|
||||||
owner.getHandle().defaultContainer.b();
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedItemSlotNum(int i) {
|
|
||||||
if (i >= 27)
|
|
||||||
return i - 27;
|
|
||||||
else
|
|
||||||
return i + 9;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getReversedArmorSlotNum(int i) {
|
|
||||||
if (i == 0)
|
|
||||||
return 3;
|
|
||||||
if (i == 1)
|
|
||||||
return 2;
|
|
||||||
if (i == 2)
|
|
||||||
return 1;
|
|
||||||
if (i == 3)
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getInventoryName() {
|
|
||||||
if (player.getName().length() > 16) {
|
|
||||||
return player.getName().substring(0, 16);
|
|
||||||
}
|
|
||||||
return player.getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean a(EntityHuman entityhuman) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,124 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_7_R4;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.lishid.openinv.internal.IAnySilentChest;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_7_R4.Block;
|
|
||||||
import net.minecraft.server.v1_7_R4.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_7_R4.IInventory;
|
|
||||||
import net.minecraft.server.v1_7_R4.InventoryLargeChest;
|
|
||||||
import net.minecraft.server.v1_7_R4.PacketPlayOutOpenWindow;
|
|
||||||
import net.minecraft.server.v1_7_R4.TileEntityChest;
|
|
||||||
import net.minecraft.server.v1_7_R4.World;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer;
|
|
||||||
|
|
||||||
public class AnySilentChest implements IAnySilentChest {
|
|
||||||
@Override
|
|
||||||
public boolean isAnyChestNeeded(Player p, int x, int y, int z) {
|
|
||||||
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
// If block on top
|
|
||||||
if (world.getType(x, y + 1, z).c())
|
|
||||||
return true;
|
|
||||||
|
|
||||||
int id = Block.getId(world.getType(x, y, z));
|
|
||||||
|
|
||||||
// If block next to chest is chest and has a block on top
|
|
||||||
if ((Block.getId(world.getType(x - 1, y, z)) == id) && (world.getType(x - 1, y + 1, z).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.getId(world.getType(x + 1, y, z)) == id) && (world.getType(x + 1, y + 1, z).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.getId(world.getType(x, y, z - 1)) == id) && (world.getType(x, y + 1, z - 1).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.getId(world.getType(x, y, z + 1)) == id) && (world.getType(x, y + 1, z + 1).c()))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean activateChest(Player p, boolean anychest, boolean silentchest, int x, int y, int z) {
|
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
|
||||||
World world = player.world;
|
|
||||||
Object chest = world.getTileEntity(x, y, z);
|
|
||||||
if (chest == null)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
int id = Block.getId(world.getType(x, y, z));
|
|
||||||
|
|
||||||
if (!anychest) {
|
|
||||||
if (world.getType(x, y + 1, z).c())
|
|
||||||
return true;
|
|
||||||
if ((Block.getId(world.getType(x - 1, y, z)) == id) && (world.getType(x - 1, y + 1, z).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.getId(world.getType(x + 1, y, z)) == id) && (world.getType(x + 1, y + 1, z).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.getId(world.getType(x, y, z - 1)) == id) && (world.getType(x, y + 1, z - 1).c()))
|
|
||||||
return true;
|
|
||||||
if ((Block.getId(world.getType(x, y, z + 1)) == id) && (world.getType(x, y + 1, z + 1).c()))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Block.getId(world.getType(x - 1, y, z)) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x - 1, y, z), (IInventory) chest);
|
|
||||||
if (Block.getId(world.getType(x + 1, y, z)) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x + 1, y, z));
|
|
||||||
if (Block.getId(world.getType(x, y, z - 1)) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(x, y, z - 1), (IInventory) chest);
|
|
||||||
if (Block.getId(world.getType(x, y, z + 1)) == id)
|
|
||||||
chest = new InventoryLargeChest("Large chest", (IInventory) chest, (TileEntityChest) world.getTileEntity(x, y, z + 1));
|
|
||||||
|
|
||||||
boolean returnValue = true;
|
|
||||||
if (!silentchest) {
|
|
||||||
player.openContainer((IInventory) chest);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
try {
|
|
||||||
int windowId = 0;
|
|
||||||
try {
|
|
||||||
Field windowID = player.getClass().getDeclaredField("containerCounter");
|
|
||||||
windowID.setAccessible(true);
|
|
||||||
windowId = windowID.getInt(player);
|
|
||||||
windowId = windowId % 100 + 1;
|
|
||||||
windowID.setInt(player, windowId);
|
|
||||||
}
|
|
||||||
catch (NoSuchFieldException e) {}
|
|
||||||
|
|
||||||
player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, 0, ((IInventory) chest).getInventoryName(), ((IInventory) chest).getSize(), true));
|
|
||||||
player.activeContainer = new SilentContainerChest(player.inventory, ((IInventory) chest));
|
|
||||||
player.activeContainer.windowId = windowId;
|
|
||||||
player.activeContainer.addSlotListener(player);
|
|
||||||
returnValue = false;
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
p.sendMessage(ChatColor.RED + "Error while sending silent chest.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_7_R4;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
import com.lishid.openinv.Permissions;
|
|
||||||
import com.lishid.openinv.internal.IInventoryAccess;
|
|
||||||
|
|
||||||
// Volatile
|
|
||||||
import net.minecraft.server.v1_7_R4.IInventory;
|
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftInventory;
|
|
||||||
|
|
||||||
public class InventoryAccess implements IInventoryAccess {
|
|
||||||
@Override
|
|
||||||
public boolean check(Inventory inventory, HumanEntity player) {
|
|
||||||
IInventory inv = grabInventory(inventory);
|
|
||||||
|
|
||||||
if (inv instanceof SpecialPlayerInventory) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITINV)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (inv instanceof SpecialEnderChest) {
|
|
||||||
if (!OpenInv.hasPermission(player, Permissions.PERM_EDITENDER)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private IInventory grabInventory(Inventory inventory) {
|
|
||||||
if (inventory instanceof CraftInventory) {
|
|
||||||
return ((CraftInventory) inventory).getInventory();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Use reflection to find the iiventory
|
|
||||||
Class<? extends Inventory> clazz = inventory.getClass();
|
|
||||||
IInventory result = null;
|
|
||||||
for (Field f : clazz.getDeclaredFields()) {
|
|
||||||
f.setAccessible(true);
|
|
||||||
if (IInventory.class.isAssignableFrom(f.getDeclaringClass())) {
|
|
||||||
try {
|
|
||||||
result = (IInventory) f.get(inventory);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user