Compare commits
	
		
			44 Commits
		
	
	
		
			2.4.2
			...
			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,26 +1,13 @@
 | 
				
			|||||||
## Goals
 | 
					Copyright (C) 2011-2014 lishid.  All rights reserved.
 | 
				
			||||||
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.
 | 
					
 | 
				
			||||||
 | 
					This program is free software: you can redistribute it and/or modify
 | 
				
			||||||
### Changes of Note
 | 
					it under the terms of the GNU General Public License as published by
 | 
				
			||||||
- Removed updater
 | 
					the Free Software Foundation,  version 3.
 | 
				
			||||||
- Removed wand
 | 
					
 | 
				
			||||||
 | 
					This program is distributed in the hope that it will be useful,
 | 
				
			||||||
## Previous Versions
 | 
					but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
Any version of Minecraft this fork has been existent for should have a [release](https://github.com/Jikoo/OpenInv/releases) tagged. Features are not backported, however.
 | 
					MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					GNU General Public License for more details.
 | 
				
			||||||
## License
 | 
					
 | 
				
			||||||
```
 | 
					You should have received a copy of the GNU General Public License
 | 
				
			||||||
Copyright (C) 2011-2014 lishid.  All rights reserved.
 | 
					along with this program. If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					 | 
				
			||||||
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/>.
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
							
								
								
									
										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,182 +18,197 @@ 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.IPlayerDataManager;
 | 
					import com.lishid.openinv.internal.AnySilentChest;
 | 
				
			||||||
import com.lishid.openinv.internal.ISpecialEnderChest;
 | 
					import com.lishid.openinv.internal.InventoryAccess;
 | 
				
			||||||
import com.lishid.openinv.internal.ISpecialPlayerInventory;
 | 
					import com.lishid.openinv.internal.PlayerDataManager;
 | 
				
			||||||
import com.lishid.openinv.internal.InternalAccessor;
 | 
					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
 | 
				
			||||||
 * 
 | 
					 *
 | 
				
			||||||
 * @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 IPlayerDataManager 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);
 | 
					    private void registerCommands() {
 | 
				
			||||||
            return;
 | 
					        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 static PlayerDataManager getPlayerLoader() {
 | 
				
			||||||
 | 
					        return playerLoader;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static InventoryAccess getInventoryAccess() {
 | 
				
			||||||
 | 
					        return inventoryAccess;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static AnySilentChest getAnySilentChest() {
 | 
				
			||||||
 | 
					        return anySilentChest;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static Object getFromConfig(String path, Object defaultValue) {
 | 
				
			||||||
 | 
					        Object val = mainPlugin.getConfig().get(path);
 | 
				
			||||||
 | 
					        if (val == null) {
 | 
				
			||||||
 | 
					            mainPlugin.getConfig().set(path, defaultValue);
 | 
				
			||||||
 | 
					            return defaultValue;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        else {
 | 
				
			||||||
        playerLoader = accessor.newPlayerDataManager();
 | 
					            return val;
 | 
				
			||||||
        inventoryAccess = accessor.newInventoryAccess();
 | 
					 | 
				
			||||||
        anySilentChest = accessor.newAnySilentChest();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        FileConfiguration config = getConfig();
 | 
					 | 
				
			||||||
        config.set("NotifySilentChest", config.getBoolean("NotifySilentChest", true));
 | 
					 | 
				
			||||||
        config.set("NotifyAnyChest", config.getBoolean("NotifyAnyChest", true));
 | 
					 | 
				
			||||||
        config.addDefault("NotifySilentChest", true);
 | 
					 | 
				
			||||||
        config.addDefault("NotifyAnyChest", true);
 | 
					 | 
				
			||||||
        config.options().copyDefaults(true);
 | 
					 | 
				
			||||||
        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() {
 | 
					 | 
				
			||||||
        return this.accessor;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public IPlayerDataManager getPlayerLoader() {
 | 
					 | 
				
			||||||
        return this.playerLoader;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public IInventoryAccess getInventoryAccess() {
 | 
					 | 
				
			||||||
        return this.inventoryAccess;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public IAnySilentChest getAnySilentChest() {
 | 
					 | 
				
			||||||
        return this.anySilentChest;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public ISpecialPlayerInventory getInventoryFor(Player player) {
 | 
					 | 
				
			||||||
        String id = getPlayerLoader().getPlayerDataID(player);
 | 
					 | 
				
			||||||
        if (inventories.containsKey(id)) {
 | 
					 | 
				
			||||||
            return inventories.get(id);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return null;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public ISpecialPlayerInventory getOrCreateInventoryFor(Player player, boolean offline) {
 | 
					 | 
				
			||||||
        String id = getPlayerLoader().getPlayerDataID(player);
 | 
					 | 
				
			||||||
        if (inventories.containsKey(id)) {
 | 
					 | 
				
			||||||
            return inventories.get(id);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        ISpecialPlayerInventory inv = getInternalAccessor().newSpecialPlayerInventory(player, offline);
 | 
					 | 
				
			||||||
        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 offline) {
 | 
					        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, offline);
 | 
					
 | 
				
			||||||
        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 notifySilentChest() {
 | 
					    public static boolean notifyAnyChest() {
 | 
				
			||||||
        return getConfig().getBoolean("NotifySilentChest", true);
 | 
					        return mainPlugin.getConfig().getBoolean("notify.any-chest", true);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public boolean notifyAnyChest() {
 | 
					    public static boolean getPlayerAnyChestStatus(Player player) {
 | 
				
			||||||
        return getConfig().getBoolean("NotifyAnyChest", true);
 | 
					        return mainPlugin.getConfig().getBoolean("toggles.any-chest." + player.getUniqueId(), false);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public boolean getPlayerSilentChestStatus(OfflinePlayer player) {
 | 
					    public static void setPlayerAnyChestStatus(Player player, boolean status) {
 | 
				
			||||||
        return getConfig().getBoolean("SilentChest." + getPlayerLoader().getPlayerDataID(player) + ".toggle", false);
 | 
					        saveToConfig("toggles.any-chest." + player.getUniqueId(), status);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setPlayerSilentChestStatus(OfflinePlayer player, boolean status) {
 | 
					    public static boolean getPlayerItemOpenInvStatus(Player player) {
 | 
				
			||||||
        getConfig().set("SilentChest." + getPlayerLoader().getPlayerDataID(player) + ".toggle", status);
 | 
					        return mainPlugin.getConfig().getBoolean("toggles.items.open-inv" + player.getUniqueId(), false);
 | 
				
			||||||
        saveConfig();
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public boolean getPlayerAnyChestStatus(OfflinePlayer player) {
 | 
					    public static void setPlayerItemOpenInvStatus(Player player, boolean status) {
 | 
				
			||||||
        return getConfig().getBoolean("AnyChest." + getPlayerLoader().getPlayerDataID(player) + ".toggle", true);
 | 
					        saveToConfig("toggles.items.open-inv." + player.getUniqueId(), status);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setPlayerAnyChestStatus(OfflinePlayer player, boolean status) {
 | 
					    public static boolean getPlayerSilentChestStatus(Player player) {
 | 
				
			||||||
        getConfig().set("AnyChest." + getPlayerLoader().getPlayerDataID(player) + ".toggle", status);
 | 
					        return mainPlugin.getConfig().getBoolean("toggles.silent-chest." + player.getUniqueId(), false);
 | 
				
			||||||
        saveConfig();
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static void ShowHelp(Player player) {
 | 
					    public static void setPlayerSilentChestStatus(Player player, boolean status) {
 | 
				
			||||||
        player.sendMessage(ChatColor.GREEN + "/openinv <Player> - Open a player's inventory");
 | 
					        saveToConfig("toggles.silent-chest." + player.getUniqueId(), status);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static void log(String text) {
 | 
				
			||||||
 | 
					        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,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;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.bukkit.event.EventHandler;
 | 
					 | 
				
			||||||
import org.bukkit.event.EventPriority;
 | 
					 | 
				
			||||||
import org.bukkit.event.Listener;
 | 
					 | 
				
			||||||
import org.bukkit.event.inventory.InventoryClickEvent;
 | 
					 | 
				
			||||||
import org.bukkit.event.inventory.InventoryDragEvent;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class OpenInvInventoryListener implements Listener {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private final OpenInv plugin;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public OpenInvInventoryListener(OpenInv plugin) {
 | 
					 | 
				
			||||||
        this.plugin = plugin;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @EventHandler(priority = EventPriority.NORMAL)
 | 
					 | 
				
			||||||
    public void onInventoryClick(InventoryClickEvent event) {
 | 
					 | 
				
			||||||
        // If this is the top inventory
 | 
					 | 
				
			||||||
        // if (event.getView().convertSlot(event.getRawSlot()) == event.getRawSlot())
 | 
					 | 
				
			||||||
        // {
 | 
					 | 
				
			||||||
        if (!plugin.getInventoryAccess().check(event.getInventory(), event.getWhoClicked())) {
 | 
					 | 
				
			||||||
            event.setCancelled(true);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        // }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @EventHandler(priority = EventPriority.NORMAL)
 | 
					 | 
				
			||||||
    public void onInventoryDrag(InventoryDragEvent event) {
 | 
					 | 
				
			||||||
        if (!plugin.getInventoryAccess().check(event.getInventory(), event.getWhoClicked())) {
 | 
					 | 
				
			||||||
            event.setCancelled(true);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -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);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,16 +1,16 @@
 | 
				
			|||||||
package com.lishid.openinv;
 | 
					package com.lishid.openinv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class Permissions {
 | 
					public class Permissions {
 | 
				
			||||||
    public static final String PERM_OPENINV = "OpenInv.openinv";
 | 
					    public static final String PERM_OPENINV = "OpenInv.openinv";
 | 
				
			||||||
    public static final String PERM_OVERRIDE = "OpenInv.override";
 | 
					    public static final String PERM_OVERRIDE = "OpenInv.override";
 | 
				
			||||||
    public static final String PERM_EXEMPT = "OpenInv.exempt";
 | 
					    public static final String PERM_EXEMPT = "OpenInv.exempt";
 | 
				
			||||||
    public static final String PERM_CROSSWORLD = "OpenInv.crossworld";
 | 
					    public static final String PERM_CROSSWORLD = "OpenInv.crossworld";
 | 
				
			||||||
    public static final String PERM_SILENT = "OpenInv.silent";
 | 
					    public static final String PERM_SILENT = "OpenInv.silent";
 | 
				
			||||||
    public static final String PERM_ANYCHEST = "OpenInv.anychest";
 | 
					    public static final String PERM_ANYCHEST = "OpenInv.anychest";
 | 
				
			||||||
    public static final String PERM_ENDERCHEST = "OpenInv.openender";
 | 
					    public static final String PERM_ENDERCHEST = "OpenInv.openender";
 | 
				
			||||||
    public static final String PERM_ENDERCHEST_ALL = "OpenInv.openenderall";
 | 
					    public static final String PERM_ENDERCHEST_ALL = "OpenInv.openenderall";
 | 
				
			||||||
    public static final String PERM_SEARCH = "OpenInv.search";
 | 
					    public static final String PERM_SEARCH = "OpenInv.search";
 | 
				
			||||||
    public static final String PERM_EDITINV = "OpenInv.editinv";
 | 
					    public static final String PERM_EDITINV = "OpenInv.editinv";
 | 
				
			||||||
    public static final String PERM_EDITENDER = "OpenInv.editender";
 | 
					    public static final String PERM_EDITENDER = "OpenInv.editender";
 | 
				
			||||||
    public static final String PERM_OPENSELF = "OpenInv.openself";
 | 
					    public static final String PERM_OPENSELF = "OpenInv.openself";
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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,134 +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;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    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() {
 | 
					 | 
				
			||||||
            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()) {
 | 
					 | 
				
			||||||
                    player.sendMessage(ChatColor.RED + "Player not found!");
 | 
					 | 
				
			||||||
                    return;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                new BukkitRunnable() {
 | 
					 | 
				
			||||||
                    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;
 | 
					 | 
				
			||||||
        if (!target.isOnline()) {
 | 
					 | 
				
			||||||
            // 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, !target.isOnline());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // 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,148 +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;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    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() {
 | 
					 | 
				
			||||||
            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()) {
 | 
					 | 
				
			||||||
                    player.sendMessage(ChatColor.RED + "Player not found!");
 | 
					 | 
				
			||||||
                    return;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                new BukkitRunnable() {
 | 
					 | 
				
			||||||
                    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;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (!target.isOnline()) {
 | 
					 | 
				
			||||||
            // 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, !target.isOnline());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // 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,33 +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.OfflinePlayer;
 | 
					 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public abstract class IPlayerDataManager {
 | 
					 | 
				
			||||||
    public final Player loadPlayer(OfflinePlayer offline) {
 | 
					 | 
				
			||||||
        if (offline.isOnline()) {
 | 
					 | 
				
			||||||
            return offline.getPlayer();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return this.loadOfflinePlayer(offline);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    protected abstract Player loadOfflinePlayer(OfflinePlayer offline);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public abstract String getPlayerDataID(OfflinePlayer 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,114 +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 IPlayerDataManager newPlayerDataManager() {
 | 
					 | 
				
			||||||
        return (IPlayerDataManager) createObject(IPlayerDataManager.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(Player.class, Boolean.class).newInstance(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(Player.class, Boolean.class).newInstance(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);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -0,0 +1,60 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * 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.UUID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
 | 
					import org.bukkit.OfflinePlayer;
 | 
				
			||||||
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.lishid.openinv.OpenInv;
 | 
				
			||||||
 | 
					import com.mojang.authlib.GameProfile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 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;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        catch (Exception e) {
 | 
				
			||||||
 | 
					            OpenInv.log(e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return null;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -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,71 +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.internal.ISpecialPlayerInventory;
 | 
					import com.lishid.openinv.OpenInv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 {
 | 
				
			||||||
    CraftPlayer owner;
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private final ItemStack[] extra = new ItemStack[5];
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					    private final CraftInventory inventory = new CraftInventory(this);
 | 
				
			||||||
 | 
					    private final ItemStack[] extra = new ItemStack[5];
 | 
				
			||||||
 | 
					    private final CraftPlayer owner;
 | 
				
			||||||
 | 
					    private boolean playerOnline;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public SpecialPlayerInventory(Player p, Boolean online) {
 | 
					    public SpecialPlayerInventory(Player p, boolean online) {
 | 
				
			||||||
        super(((CraftPlayer) p).getHandle());
 | 
					        super(((CraftPlayer) p).getHandle());
 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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
 | 
				
			||||||
@@ -101,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);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -124,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);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -144,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;
 | 
				
			||||||
@@ -153,8 +147,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                return itemstack;
 | 
					                return itemstack;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        } else {
 | 
				
			||||||
        else {
 | 
					 | 
				
			||||||
            return null;
 | 
					            return null;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -166,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);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -184,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();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -241,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();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -253,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,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_4_5;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					 | 
				
			||||||
import org.bukkit.OfflinePlayer;
 | 
					 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.lishid.openinv.internal.IPlayerDataManager;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 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 IPlayerDataManager {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @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,146 +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.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 {
 | 
					 | 
				
			||||||
    public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private CraftPlayer owner;
 | 
					 | 
				
			||||||
    private final InventoryEnderChest enderChest;
 | 
					 | 
				
			||||||
    private int maxStack = MAX_STACK;
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialEnderChest(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle().getEnderChest().getName(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,256 +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.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 {
 | 
					 | 
				
			||||||
    CraftPlayer owner;
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private final ItemStack[] extra = new ItemStack[5];
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialPlayerInventory(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,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_4_6;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					 | 
				
			||||||
import org.bukkit.OfflinePlayer;
 | 
					 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.lishid.openinv.internal.IPlayerDataManager;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 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 IPlayerDataManager {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @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,146 +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.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 {
 | 
					 | 
				
			||||||
    public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private CraftPlayer owner;
 | 
					 | 
				
			||||||
    private final InventoryEnderChest enderChest;
 | 
					 | 
				
			||||||
    private int maxStack = MAX_STACK;
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialEnderChest(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle().getEnderChest().getName(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,256 +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.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 {
 | 
					 | 
				
			||||||
    CraftPlayer owner;
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private final ItemStack[] extra = new ItemStack[5];
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialPlayerInventory(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,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.internal.v1_4_R1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					 | 
				
			||||||
import org.bukkit.OfflinePlayer;
 | 
					 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.lishid.openinv.internal.IPlayerDataManager;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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 IPlayerDataManager {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @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,146 +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;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 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 {
 | 
					 | 
				
			||||||
    public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private CraftPlayer owner;
 | 
					 | 
				
			||||||
    private final InventoryEnderChest enderChest;
 | 
					 | 
				
			||||||
    private int maxStack = MAX_STACK;
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialEnderChest(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle().getEnderChest().getName(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,256 +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.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 {
 | 
					 | 
				
			||||||
    CraftPlayer owner;
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private final ItemStack[] extra = new ItemStack[5];
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialPlayerInventory(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,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_5_R2;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					 | 
				
			||||||
import org.bukkit.OfflinePlayer;
 | 
					 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.lishid.openinv.internal.IPlayerDataManager;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 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 IPlayerDataManager {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @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,146 +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.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 {
 | 
					 | 
				
			||||||
    public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private CraftPlayer owner;
 | 
					 | 
				
			||||||
    private final InventoryEnderChest enderChest;
 | 
					 | 
				
			||||||
    private int maxStack = MAX_STACK;
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialEnderChest(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle().getEnderChest().getName(), ((CraftPlayer) p).getHandle().getEnderChest().c(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,256 +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.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 {
 | 
					 | 
				
			||||||
    CraftPlayer owner;
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private final ItemStack[] extra = new ItemStack[5];
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialPlayerInventory(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,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_5_R3;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					 | 
				
			||||||
import org.bukkit.OfflinePlayer;
 | 
					 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.lishid.openinv.internal.IPlayerDataManager;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 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 IPlayerDataManager {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @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,146 +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.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 {
 | 
					 | 
				
			||||||
    public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private CraftPlayer owner;
 | 
					 | 
				
			||||||
    private final InventoryEnderChest enderChest;
 | 
					 | 
				
			||||||
    private int maxStack = MAX_STACK;
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialEnderChest(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle().getEnderChest().getName(), ((CraftPlayer) p).getHandle().getEnderChest().c(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,256 +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.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 {
 | 
					 | 
				
			||||||
    CraftPlayer owner;
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private final ItemStack[] extra = new ItemStack[5];
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialPlayerInventory(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,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_6_R1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					 | 
				
			||||||
import org.bukkit.OfflinePlayer;
 | 
					 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.lishid.openinv.internal.IPlayerDataManager;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 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 IPlayerDataManager {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @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,146 +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.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 {
 | 
					 | 
				
			||||||
    public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private CraftPlayer owner;
 | 
					 | 
				
			||||||
    private final InventoryEnderChest enderChest;
 | 
					 | 
				
			||||||
    private int maxStack = MAX_STACK;
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialEnderChest(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle().getEnderChest().getName(), ((CraftPlayer) p).getHandle().getEnderChest().c(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,257 +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.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 {
 | 
					 | 
				
			||||||
    CraftPlayer owner;
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private final ItemStack[] extra = new ItemStack[5];
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialPlayerInventory(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,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_6_R2;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					 | 
				
			||||||
import org.bukkit.OfflinePlayer;
 | 
					 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.lishid.openinv.internal.IPlayerDataManager;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 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 IPlayerDataManager {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @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,146 +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.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 {
 | 
					 | 
				
			||||||
    public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private CraftPlayer owner;
 | 
					 | 
				
			||||||
    private final InventoryEnderChest enderChest;
 | 
					 | 
				
			||||||
    private int maxStack = MAX_STACK;
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialEnderChest(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle().getEnderChest().getName(), ((CraftPlayer) p).getHandle().getEnderChest().c(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,256 +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.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 {
 | 
					 | 
				
			||||||
    CraftPlayer owner;
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private final ItemStack[] extra = new ItemStack[5];
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialPlayerInventory(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,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_6_R3;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					 | 
				
			||||||
import org.bukkit.OfflinePlayer;
 | 
					 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.lishid.openinv.internal.IPlayerDataManager;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 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 IPlayerDataManager {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @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,146 +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.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 {
 | 
					 | 
				
			||||||
    public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private CraftPlayer owner;
 | 
					 | 
				
			||||||
    private final InventoryEnderChest enderChest;
 | 
					 | 
				
			||||||
    private int maxStack = MAX_STACK;
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialEnderChest(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle().getEnderChest().getName(), ((CraftPlayer) p).getHandle().getEnderChest().c(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,256 +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.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 {
 | 
					 | 
				
			||||||
    CraftPlayer owner;
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private final ItemStack[] extra = new ItemStack[5];
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialPlayerInventory(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,58 +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;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.lishid.openinv.internal.IPlayerDataManager;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 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 IPlayerDataManager {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @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,146 +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.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 {
 | 
					 | 
				
			||||||
    public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private CraftPlayer owner;
 | 
					 | 
				
			||||||
    private final InventoryEnderChest enderChest;
 | 
					 | 
				
			||||||
    private int maxStack = MAX_STACK;
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialEnderChest(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle().getEnderChest().getInventoryName(), ((CraftPlayer) p).getHandle().getEnderChest().k_(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,256 +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.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 {
 | 
					 | 
				
			||||||
    CraftPlayer owner;
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private final ItemStack[] extra = new ItemStack[5];
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialPlayerInventory(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,58 +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;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.lishid.openinv.internal.IPlayerDataManager;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//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 IPlayerDataManager {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @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,146 +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.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 {
 | 
					 | 
				
			||||||
    public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private CraftPlayer owner;
 | 
					 | 
				
			||||||
    private final InventoryEnderChest enderChest;
 | 
					 | 
				
			||||||
    private int maxStack = MAX_STACK;
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialEnderChest(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle().getEnderChest().getInventoryName(), ((CraftPlayer) p).getHandle().getEnderChest().k_(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,256 +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.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 {
 | 
					 | 
				
			||||||
    CraftPlayer owner;
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private final ItemStack[] extra = new ItemStack[5];
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialPlayerInventory(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,58 +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;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.lishid.openinv.internal.IPlayerDataManager;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 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 IPlayerDataManager {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @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,146 +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.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 {
 | 
					 | 
				
			||||||
    public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private CraftPlayer owner;
 | 
					 | 
				
			||||||
    private final InventoryEnderChest enderChest;
 | 
					 | 
				
			||||||
    private int maxStack = MAX_STACK;
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialEnderChest(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle().getEnderChest().getInventoryName(), ((CraftPlayer) p).getHandle().getEnderChest().k_(), ((CraftPlayer) p).getHandle().getEnderChest().getSize());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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,256 +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.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 {
 | 
					 | 
				
			||||||
    CraftPlayer owner;
 | 
					 | 
				
			||||||
    public boolean playerOnline = false;
 | 
					 | 
				
			||||||
    private final ItemStack[] extra = new ItemStack[5];
 | 
					 | 
				
			||||||
    private final CraftInventory inventory = new CraftInventory(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public SpecialPlayerInventory(Player p, Boolean online) {
 | 
					 | 
				
			||||||
        super(((CraftPlayer) p).getHandle());
 | 
					 | 
				
			||||||
        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) {
 | 
					 | 
				
			||||||
            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;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user