Skip to content

Commit

Permalink
Clean up, added config, made texture loading async
Browse files Browse the repository at this point in the history
  • Loading branch information
suite committed Dec 4, 2020
1 parent 1512278 commit 270089a
Show file tree
Hide file tree
Showing 10 changed files with 129 additions and 59 deletions.
48 changes: 42 additions & 6 deletions Cameras/src/water/of/cup/Camera.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,16 @@
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import java.util.regex.Pattern;

import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.inventory.ShapedRecipe;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
Expand Down Expand Up @@ -37,6 +40,8 @@ public class Camera extends JavaPlugin {
private static Camera instance;
List<Integer> mapIDsNotToRender = new ArrayList<>();
ResourcePackManager resourcePackManager = new ResourcePackManager();
private File configFile;
private FileConfiguration config;

@Override
public void onEnable() {
Expand All @@ -60,7 +65,6 @@ public void onEnable() {
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String encodedData = br.readLine();
Bukkit.getLogger().info("Reading MapID: " + mapId);

MapView mapView = Bukkit.getMap(Integer.valueOf(mapId));

Expand All @@ -74,8 +78,6 @@ public void render(MapView mapViewNew, MapCanvas mapCanvas, Player player) {
if(!mapIDsNotToRender.contains(mapId)) {
mapIDsNotToRender.add(mapId);

Bukkit.getLogger().info("Starting render... " + mapId);

int x = 0;
int y = 0;
int skipsLeft = 0;
Expand Down Expand Up @@ -107,10 +109,7 @@ public void render(MapView mapViewNew, MapCanvas mapCanvas, Player player) {

skipsLeft -= 1;
}


}
Bukkit.getLogger().info("Ending render... " + mapId);
}
}
});
Expand Down Expand Up @@ -172,13 +171,50 @@ private void loadConfig() {
getDataFolder().mkdir();
}

configFile = new File(getDataFolder(), "config.yml");
if (!configFile.exists()) {
try {
configFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}

config = YamlConfiguration.loadConfiguration(configFile);

if (!config.contains("settings")) {
config.set("settings.messages.notready", "&cCameras is still loading, please wait.");
config.set("settings.messages.delay", "&cPlease wait before taking another picture.");
config.set("settings.messages.invfull", "&cYou can not take a picture with a full inventory");
config.set("settings.messages.nopaper", "&cYou must have paper in order to take a picture");
config.set("settings.messages.enabled", true);
config.set("settings.delay.amount", 1000);
config.set("settings.delay.enabled", true);
}

File mapDir = new File(getDataFolder(), "maps");
if (!mapDir.exists()) {
mapDir.mkdir();
}

this.saveConfig();
}

public ResourcePackManager getResourcePackManager() {
return this.resourcePackManager;
}

@Override
public void saveConfig() {
try {
config.save(configFile);
} catch (IOException e) {
e.printStackTrace();
}
}

@Override
public FileConfiguration getConfig() {
return config;
}
}
8 changes: 1 addition & 7 deletions Cameras/src/water/of/cup/MapStorage.java
Original file line number Diff line number Diff line change
@@ -1,24 +1,18 @@
package water.of.cup;

import org.apache.logging.log4j.core.util.FileUtils;
import org.bukkit.Bukkit;
import org.bukkit.map.MapRenderer;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.List;

public class MapStorage {

public static void store(int id, byte[][] data) {
// String serializedDataSimple = serializeMapDataSimple(data);
// String serializedDataSimple = serializeMapDataSimple(data);
String serializedData = serializeMapDataCompressed(data);

// Bukkit.getLogger().info("Serialized Data: " + serializedData);

File file = new File(Camera.getInstance().getDataFolder(), "maps/map_" + id + ".txt");
if(!file.exists()){
try {
Expand Down
37 changes: 29 additions & 8 deletions Cameras/src/water/of/cup/Picture.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,43 @@
package water.of.cup;

import java.util.ArrayList;

import java.util.HashMap;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.MapMeta;
import org.bukkit.map.MapCanvas;
import org.bukkit.map.MapPalette;
import org.bukkit.map.MapRenderer;
import org.bukkit.map.MapView;
import org.bukkit.util.Vector;

public class Picture {
private static HashMap<Player, Long> delayMap = new HashMap<>();

public static boolean takePicture(Player p) {
Camera instance = Camera.getInstance();
boolean messages = instance.getConfig().getBoolean("settings.messages.enabled");
if(instance.getResourcePackManager().isLoaded()) {
if(instance.getConfig().getBoolean("settings.delay.enabled")) {
if(!delayMap.containsKey(p)) {
delayMap.put(p, System.currentTimeMillis());
} else {
int delay = instance.getConfig().getInt("settings.delay.amount");
if(System.currentTimeMillis() - delayMap.get(p) >= delay) {
delayMap.put(p, System.currentTimeMillis());
} else {
if(messages) {
p.sendMessage(ChatColor.translateAlternateColorCodes('&', instance.getConfig().getString("settings.messages.delay")));
}
return false;
}
}
}
} else {
if(messages) {
p.sendMessage(ChatColor.translateAlternateColorCodes('&', instance.getConfig().getString("settings.messages.notready")));
}
return false;
}

ItemStack itemStack = new ItemStack(Material.FILLED_MAP); // requires api-version: 1.13 in plugin.yml
MapMeta mapMeta = (MapMeta) itemStack.getItemMeta();
Expand All @@ -32,8 +54,7 @@ public static boolean takePicture(Player p) {

itemStack.setItemMeta(mapMeta);
p.getInventory().addItem(itemStack);



return true;
}
}
1 change: 0 additions & 1 deletion Cameras/src/water/of/cup/Renderer.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package water.of.cup;

import org.bukkit.Bukkit;
import org.bukkit.Color;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.map.MapCanvas;
Expand Down
33 changes: 23 additions & 10 deletions Cameras/src/water/of/cup/ResourcePackManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public class ResourcePackManager {

private File resourcePackFile;
private HashMap<Material, BufferedImage> imageHashMap = new HashMap<>();
private boolean isLoaded;

public void initialize() {
File dataFolder = Camera.getInstance().getDataFolder();
Expand All @@ -24,18 +25,26 @@ public void initialize() {
mapDir.mkdir();
}

File folder = new File(dataFolder + "/resource-packs");
File[] listOfFiles = folder.listFiles();

if(listOfFiles.length == 0) {
Bukkit.getLogger().info("No resource pack found, downloading...");
if(mapDir.listFiles().length == 0) {
Bukkit.getLogger().info("No resource pack found, downloading... (this may take a while)");
this.downloadResourcePack();
} else {
this.resourcePackFile = listOfFiles[0];
}

this.initializeImageHashmap();
Bukkit.getLogger().info("Using resource pack " + this.resourcePackFile.getName());
for(File file : mapDir.listFiles()) {
if(!file.getName().endsWith(".zip")) {
this.resourcePackFile = file;
} else {
file.delete();
}
}

if(this.resourcePackFile == null) {
Bukkit.getLogger().warning("No resource pack found. Please restart.");
return;
}

Bukkit.getLogger().info("Loading in resource pack (this may take a while)");
Bukkit.getScheduler().runTaskAsynchronously(Camera.getInstance(), () -> this.initializeImageHashmap());
}

public File getTextureByMaterial(Material material) {
Expand Down Expand Up @@ -84,6 +93,7 @@ private void initializeImageHashmap() {

Bukkit.getLogger().info("Loaded " + this.imageHashMap.size() + " textures from resource pack "
+ this.resourcePackFile.getName());
this.isLoaded = true;
}

public HashMap<Material, BufferedImage> getImageHashMap() {
Expand All @@ -107,9 +117,12 @@ private void downloadResourcePack() {

ZipUtils.unzip(fileLocation, Camera.getInstance().getDataFolder() + "/resource-packs/1_16_4/");
fileLocation.delete();
this.resourcePackFile = destLocation;
} catch (IOException e) {
e.printStackTrace();
}
}

public boolean isLoaded() {
return this.isLoaded;
}
}
7 changes: 0 additions & 7 deletions Cameras/src/water/of/cup/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,10 @@
import java.util.HashMap;
import java.util.Map;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.craftbukkit.v1_14_R1.block.CraftBlock;
import org.bukkit.map.MapPalette;
import org.bukkit.util.Vector;

import net.minecraft.server.v1_14_R1.MaterialMapColor;
import net.minecraft.server.v1_14_R1.MinecraftServer;

public class Utils {
static Map<Material, Color> blocksMap = new HashMap<Material, Color>();
Expand Down
6 changes: 1 addition & 5 deletions Cameras/src/water/of/cup/ZipUtils.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package water.of.cup;

import org.bukkit.Bukkit;

import java.io.*;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;

public class ZipUtils {

Expand All @@ -17,8 +14,6 @@ public static void unzip(File fileNew, String destPath) throws IOException {
ZipEntry zipEntry = (ZipEntry) enu.nextElement();

String name = zipEntry.getName();
long size = zipEntry.getSize();
long compressedSize = zipEntry.getCompressedSize();

File file = new File(destPath + name);
if (name.endsWith("/")) {
Expand All @@ -42,6 +37,7 @@ public static void unzip(File fileNew, String destPath) throws IOException {
fos.close();

}

zipFile.close();
}
}
9 changes: 7 additions & 2 deletions Cameras/src/water/of/cup/commands/CameraCommands.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,12 @@

import water.of.cup.Picture;

import java.util.HashMap;

public class CameraCommands implements CommandExecutor {

private HashMap<Player, Long> delayMap = new HashMap<>();

@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
if (!(sender instanceof Player)) {
Expand All @@ -17,10 +21,11 @@ public boolean onCommand(CommandSender sender, Command cmd, String commandLabel,
Player p = (Player) sender;

if (cmd.getName().equalsIgnoreCase("takepicture") && p.isOp()) {

Picture.takePicture(p);
return true;
}
return true;

return false;
}

}
Loading

0 comments on commit 270089a

Please sign in to comment.