Commit 27212904 authored by Ash's avatar Ash
Browse files

Rewrote spray handler, changed sprays to be loaded from the assets/textures...

Rewrote spray handler, changed sprays to be loaded from the assets/textures folder like everything else
parent 74a26d9f
...@@ -159,12 +159,14 @@ ...@@ -159,12 +159,14 @@
<version>${mythic.version}</version> <version>${mythic.version}</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<!--
<dependency> <dependency>
<groupId>io.lumine</groupId> <groupId>io.lumine</groupId>
<artifactId>LumineUtils</artifactId> <artifactId>LumineUtils</artifactId>
<version>${lumineutils.version}</version> <version>${lumineutils.version}</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
-->
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
......
...@@ -3,6 +3,7 @@ package io.lumine.cosmetics.commands; ...@@ -3,6 +3,7 @@ package io.lumine.cosmetics.commands;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import io.lumine.mythic.bukkit.utils.logging.Log;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
...@@ -24,7 +25,7 @@ public class SprayCommand extends Command<MCCosmeticsPlugin> { ...@@ -24,7 +25,7 @@ public class SprayCommand extends Command<MCCosmeticsPlugin> {
var profile = getPlugin().getProfiles().getProfile(player); var profile = getPlugin().getProfiles().getProfile(player);
if(args.length > 0) { if(args.length > 0) {
var sprayName = args[1]; var sprayName = args[0];
var maybeSpray = getPlugin().getSprayManager().getCosmetic(sprayName); var maybeSpray = getPlugin().getSprayManager().getCosmetic(sprayName);
if(maybeSpray.isEmpty()) { if(maybeSpray.isEmpty()) {
...@@ -40,12 +41,15 @@ public class SprayCommand extends Command<MCCosmeticsPlugin> { ...@@ -40,12 +41,15 @@ public class SprayCommand extends Command<MCCosmeticsPlugin> {
var maybeSpray = profile.getEquipped(Spray.class); var maybeSpray = profile.getEquipped(Spray.class);
if(maybeSpray.isEmpty()) { if(maybeSpray.isEmpty()) {
Log.info("no spray");
return true; return true;
} }
var spray = (Spray) maybeSpray.get().getCosmetic(); var spray = (Spray) maybeSpray.get().getCosmetic();
Log.info("spray");
if(profile.has(spray)) { if(profile.has(spray)) {
Log.info("has spray");
getPlugin().getSprayManager().useSpray(player, spray); getPlugin().getSprayManager().useSpray(player, spray);
} }
} }
......
package io.lumine.cosmetics.nms.cosmetic; package io.lumine.cosmetics.nms.cosmetic;
import io.lumine.cosmetics.types.sprays.Spray; import io.lumine.cosmetics.types.sprays.Spray;
import io.lumine.cosmetics.types.sprays.types.MapSpray;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
public interface VolatileSprayHelper extends VolatileCosmeticHelper { public interface VolatileSprayHelper extends VolatileCosmeticHelper {
int drawSpray(Spray spray, Location location, BlockFace face, int rotation); int drawMapSpray(MapSpray spray, Location location, BlockFace face, int rotation);
} }
...@@ -10,6 +10,7 @@ import io.lumine.cosmetics.storage.sql.SqlStorage; ...@@ -10,6 +10,7 @@ import io.lumine.cosmetics.storage.sql.SqlStorage;
import io.lumine.cosmetics.storage.sql.mappings.Keys; import io.lumine.cosmetics.storage.sql.mappings.Keys;
import io.lumine.cosmetics.storage.sql.mappings.tables.records.ProfileRecord; import io.lumine.cosmetics.storage.sql.mappings.tables.records.ProfileRecord;
import io.lumine.mythic.bukkit.utils.Schedulers; import io.lumine.mythic.bukkit.utils.Schedulers;
import io.lumine.mythic.bukkit.utils.logging.Log;
import io.lumine.mythic.bukkit.utils.serialize.Chroma; import io.lumine.mythic.bukkit.utils.serialize.Chroma;
import lombok.Getter; import lombok.Getter;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
...@@ -72,7 +73,7 @@ public class Profile implements CosmeticProfile,io.lumine.mythic.bukkit.utils.st ...@@ -72,7 +73,7 @@ public class Profile implements CosmeticProfile,io.lumine.mythic.bukkit.utils.st
final var cosmeticData = new ProfileCosmeticData(cosmetic); final var cosmeticData = new ProfileCosmeticData(cosmetic);
equippedCosmetics.put(cosmetic.getType(), cosmeticData); equippedCosmetics.put(cosmetic.getType(), cosmeticData);
equipped.put(cosmetic.getClass(), new EquippedCosmetic(cosmetic)); equipped.put(CosmeticType.get(cosmetic.getType()), new EquippedCosmetic(cosmetic));
cosmetic.getManager().equip(this); cosmetic.getManager().equip(this);
if(manager.getAdapter() instanceof SqlStorage sqlStorage) { if(manager.getAdapter() instanceof SqlStorage sqlStorage) {
...@@ -90,7 +91,7 @@ public class Profile implements CosmeticProfile,io.lumine.mythic.bukkit.utils.st ...@@ -90,7 +91,7 @@ public class Profile implements CosmeticProfile,io.lumine.mythic.bukkit.utils.st
final var cosmeticData = new ProfileCosmeticData(cosmetic); final var cosmeticData = new ProfileCosmeticData(cosmetic);
equippedCosmetics.put(cosmetic.getType(), cosmeticData); equippedCosmetics.put(cosmetic.getType(), cosmeticData);
equipped.put(cosmetic.getClass(), new EquippedCosmetic(variant)); equipped.put(CosmeticType.get(cosmetic.getType()), new EquippedCosmetic(variant));
cosmetic.getManager().equip(this); cosmetic.getManager().equip(this);
if(manager.getAdapter() instanceof SqlStorage sqlStorage) { if(manager.getAdapter() instanceof SqlStorage sqlStorage) {
...@@ -107,7 +108,7 @@ public class Profile implements CosmeticProfile,io.lumine.mythic.bukkit.utils.st ...@@ -107,7 +108,7 @@ public class Profile implements CosmeticProfile,io.lumine.mythic.bukkit.utils.st
final var cosmeticData = new ProfileCosmeticData(cosmetic, color); final var cosmeticData = new ProfileCosmeticData(cosmetic, color);
equippedCosmetics.put(cosmetic.getType(), cosmeticData); equippedCosmetics.put(cosmetic.getType(), cosmeticData);
equipped.put(cosmetic.getClass(), new EquippedCosmetic(cosmetic, color)); equipped.put(CosmeticType.get(cosmetic.getType()), new EquippedCosmetic(cosmetic, color));
cosmetic.getManager().equip(this); cosmetic.getManager().equip(this);
if(manager.getAdapter() instanceof SqlStorage sqlStorage) { if(manager.getAdapter() instanceof SqlStorage sqlStorage) {
...@@ -117,7 +118,7 @@ public class Profile implements CosmeticProfile,io.lumine.mythic.bukkit.utils.st ...@@ -117,7 +118,7 @@ public class Profile implements CosmeticProfile,io.lumine.mythic.bukkit.utils.st
@Override @Override
public void unequip(Cosmetic cosmetic) { public void unequip(Cosmetic cosmetic) {
unequip(cosmetic.getClass()); unequip(CosmeticType.get(cosmetic.getType()));
} }
@Override @Override
......
...@@ -3,21 +3,14 @@ package io.lumine.cosmetics.types.sprays; ...@@ -3,21 +3,14 @@ package io.lumine.cosmetics.types.sprays;
import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.api.players.CosmeticProfile;
import io.lumine.cosmetics.constants.CosmeticType; import io.lumine.cosmetics.constants.CosmeticType;
import io.lumine.cosmetics.types.AbstractCosmetic; import io.lumine.cosmetics.types.AbstractCosmetic;
import io.lumine.mythic.api.packs.Pack;
import io.lumine.mythic.bukkit.utils.menu.Icon; import io.lumine.mythic.bukkit.utils.menu.Icon;
import java.io.File; import java.io.File;
import org.bukkit.entity.Player; public abstract class Spray extends AbstractCosmetic {
import lombok.Getter; public Spray(SprayManager manager, Pack pack, File file, String key) {
super(manager, pack, file, CosmeticType.type(Spray.class), key);
public class Spray extends AbstractCosmetic {
@Getter private final SprayImage image;
public Spray(SprayManager manager, File file, String key) {
super(manager, file, CosmeticType.type(Spray.class), key);
this.image = manager.getSprayImage(key);
} }
@Override @Override
...@@ -29,9 +22,5 @@ public class Spray extends AbstractCosmetic { ...@@ -29,9 +22,5 @@ public class Spray extends AbstractCosmetic {
public Icon<CosmeticProfile> getIcon() { public Icon<CosmeticProfile> getIcon() {
return buildIcon("spray"); return buildIcon("spray");
} }
public void use(Player player) {
((SprayManager) getManager()).useSpray(player, this);
}
} }
...@@ -2,6 +2,7 @@ package io.lumine.cosmetics.types.sprays; ...@@ -2,6 +2,7 @@ package io.lumine.cosmetics.types.sprays;
import java.io.File; import java.io.File;
import io.lumine.mythic.bukkit.utils.Schedulers;
import io.lumine.mythic.bukkit.utils.logging.Log; import io.lumine.mythic.bukkit.utils.logging.Log;
import io.lumine.mythic.bukkit.utils.maps.MapImage; import io.lumine.mythic.bukkit.utils.maps.MapImage;
import lombok.Data; import lombok.Data;
...@@ -16,17 +17,22 @@ public class SprayImage { ...@@ -16,17 +17,22 @@ public class SprayImage {
private final File file; private final File file;
private final String name; private final String name;
private final int mapNumber; private final int mapNumber;
private byte[] pixels; private byte[] pixels = null;
public SprayImage(SprayManager sprayManager, File file, int mapNumber) { public SprayImage(SprayManager sprayManager, File file, int mapNumber) {
this.manager = sprayManager; this.manager = sprayManager;
this.file = file; this.file = file;
this.name = file.getName().split("\\.")[0]; this.name = file.getName().split("\\.")[0];
this.mapNumber = mapNumber; this.mapNumber = mapNumber;
Log.info("Loaded image {0}", name); }
MapImage.imageToMapPixels(file, 128).ifPresent(pixels -> {
this.pixels = pixels; public byte[] getPixels() {
}); if(pixels == null) {
MapImage.imageToMapPixels(file, MAP_SIZE).ifPresent(pixels -> {
this.pixels = pixels;
});
}
return pixels;
} }
} }
package io.lumine.cosmetics.types.sprays; package io.lumine.cosmetics.types.sprays;
import io.lumine.cosmetics.types.sprays.types.MapSpray;
import io.lumine.mythic.api.packs.Pack; import io.lumine.mythic.api.packs.Pack;
import io.lumine.mythic.bukkit.utils.Events; import io.lumine.mythic.bukkit.utils.Events;
import io.lumine.mythic.bukkit.utils.Schedulers; import io.lumine.mythic.bukkit.utils.Schedulers;
...@@ -51,9 +52,6 @@ public class SprayManager extends MCCosmeticsManager<Spray> { ...@@ -51,9 +52,6 @@ public class SprayManager extends MCCosmeticsManager<Spray> {
private final static CooldownMap<UUID> keytapTimer = CooldownMap.create(Cooldown.of(500, TimeUnit.MILLISECONDS)); private final static CooldownMap<UUID> keytapTimer = CooldownMap.create(Cooldown.of(500, TimeUnit.MILLISECONDS));
private final AtomicInteger currentMapId = new AtomicInteger(Integer.MIN_VALUE); private final AtomicInteger currentMapId = new AtomicInteger(Integer.MIN_VALUE);
private final Map<String,SprayImage> images = Maps.newConcurrentMap();
private final Map<UUID,Integer> activeByPlayer = new ConcurrentHashMap<>(); private final Map<UUID,Integer> activeByPlayer = new ConcurrentHashMap<>();
public SprayManager(MCCosmeticsPlugin plugin) { public SprayManager(MCCosmeticsPlugin plugin) {
...@@ -64,8 +62,6 @@ public class SprayManager extends MCCosmeticsManager<Spray> { ...@@ -64,8 +62,6 @@ public class SprayManager extends MCCosmeticsManager<Spray> {
@Override @Override
public void load(MCCosmeticsPlugin plugin) { public void load(MCCosmeticsPlugin plugin) {
loadSprayImages();
super.load(plugin); super.load(plugin);
Events.subscribe(PlayerChangedWorldEvent.class) Events.subscribe(PlayerChangedWorldEvent.class)
...@@ -90,7 +86,7 @@ public class SprayManager extends MCCosmeticsManager<Spray> { ...@@ -90,7 +86,7 @@ public class SprayManager extends MCCosmeticsManager<Spray> {
@Override @Override
public Spray build(Pack pack, File file, String node) { public Spray build(Pack pack, File file, String node) {
return new Spray(this, file, node); return new MapSpray(this, pack, file, node);
} }
@Override @Override
...@@ -101,38 +97,10 @@ public class SprayManager extends MCCosmeticsManager<Spray> { ...@@ -101,38 +97,10 @@ public class SprayManager extends MCCosmeticsManager<Spray> {
removeSpray(profile.getPlayer()); removeSpray(profile.getPlayer());
} }
private void loadSprayImages() { public int getNextMapId() {
images.clear();
final Collection<File> files = Lists.newArrayList();
final String type = CosmeticType.folder(cosmeticClass);
for(var packFolder : plugin.getConfiguration().getPackFolders()) {
final File confFolder = new File(packFolder.getAbsolutePath() + System.getProperty("file.separator") + type);
if(confFolder.exists() && confFolder.isDirectory()) {
files.addAll(Files.getAll(confFolder.getAbsolutePath(), Lists.newArrayList("png", "jpg")));
}
}
for(var file : files) {
var img = createSprayImage(file);
images.put(img.getName(), img);
}
Log.info("Loaded " + images.size() + " spray images");
}
private SprayImage createSprayImage(File file) {
return new SprayImage(this, file, getNextMapId());
}
private int getNextMapId() {
return currentMapId.updateAndGet(id -> (id + 1)); return currentMapId.updateAndGet(id -> (id + 1));
} }
public SprayImage getSprayImage(String name) {
return images.getOrDefault(name, null);
}
public boolean useSpray(Player player) { public boolean useSpray(Player player) {
var profile = getPlugin().getProfiles().getProfile(player); var profile = getPlugin().getProfiles().getProfile(player);
var maybeSpray = profile.getEquipped(Spray.class); var maybeSpray = profile.getEquipped(Spray.class);
...@@ -144,7 +112,6 @@ public class SprayManager extends MCCosmeticsManager<Spray> { ...@@ -144,7 +112,6 @@ public class SprayManager extends MCCosmeticsManager<Spray> {
} }
} }
public boolean useSpray(Player player, Spray spray) { public boolean useSpray(Player player, Spray spray) {
final Location location = player.getEyeLocation(); final Location location = player.getEyeLocation();
if(plugin.getWorldGuardSupport() != null) { if(plugin.getWorldGuardSupport() != null) {
...@@ -181,8 +148,14 @@ public class SprayManager extends MCCosmeticsManager<Spray> { ...@@ -181,8 +148,14 @@ public class SprayManager extends MCCosmeticsManager<Spray> {
if(REPLACE_SPRAY.get()) { if(REPLACE_SPRAY.get()) {
removeSpray(player); removeSpray(player);
} }
int eid = ((VolatileSprayHelper) getNMSHelper()).drawSpray(spray, location, face, rotation); int eid;
if(spray instanceof MapSpray mapSpray) {
eid = ((VolatileSprayHelper) getNMSHelper()).drawMapSpray(mapSpray, location, face, rotation);
} else {
return;
}
if(REPLACE_SPRAY.get()) { if(REPLACE_SPRAY.get()) {
activeByPlayer.put(player.getUniqueId(), eid); activeByPlayer.put(player.getUniqueId(), eid);
......
package io.lumine.cosmetics.types.sprays;
import java.io.File;
public class SprayMap {
public SprayMap(SprayManager sprayManager, File file, int nextMapId) {
}
}
package io.lumine.cosmetics.types.sprays.types;
import io.lumine.cosmetics.config.MCCLang;
import io.lumine.cosmetics.config.Scope;
import io.lumine.cosmetics.logging.MCLogger;
import io.lumine.cosmetics.types.sprays.Spray;
import io.lumine.cosmetics.types.sprays.SprayImage;
import io.lumine.cosmetics.types.sprays.SprayManager;
import io.lumine.mythic.api.packs.Pack;
import io.lumine.mythic.bukkit.utils.config.properties.Property;
import io.lumine.mythic.bukkit.utils.config.properties.types.StringProp;
import lombok.Getter;
import org.bukkit.entity.Player;
import java.io.File;
public class MapSpray extends Spray {
private static final StringProp IMAGE = Property.String(Scope.NONE, "Texture");
@Getter private final String imagePath;
@Getter private final SprayImage image;
public MapSpray(SprayManager manager, Pack pack, File file, String key) {
super(manager, pack, file, key);
this.imagePath = MODEL.fget(file, this);
this.image = getSprayImage(imagePath);
if(this.imagePath == null) {
MCLogger.error(MCCLang.get("cosmetic.spray.error.no-image-specified", "No image specified for spray {0}", key));
return;
}
if(this.image == null) {
MCLogger.error(MCCLang.get("cosmetic.spray.error.image-not-found", "Image {0} for spray {1} was not found", imagePath, key));
}
}
public void use(Player player) {
if(this.image == null) {
MCLogger.error(MCCLang.get("cosmetic.spray.error.image-not-found", "Image {0} for spray {1} was not found", imagePath, key));
return;
}
((SprayManager) getManager()).useSpray(player, this);
}
protected SprayImage getSprayImage(String key) {
final var assetsFolder = mythicPack.getPackFolder("assets");
final var texturesFolder = new File(assetsFolder, "textures");
final var sprayFilePng = new File(texturesFolder, key + ".png");
final var sprayFileJpg = new File(texturesFolder, key + ".jpg");
if (sprayFilePng.exists()) {
return createSprayImage(sprayFilePng);
} else if (sprayFileJpg.exists()) {
return createSprayImage(sprayFileJpg);
}
return null;
}
private SprayImage createSprayImage(File file) {
final var manager = ((SprayManager) getManager());
return new SprayImage(manager, file, manager.getNextMapId());
}
}
package io.lumine.cosmetics.nms.v1_21_R2.cosmetic; package io.lumine.cosmetics.nms.v1_21_R2.cosmetic;
import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.types.sprays.Spray;
import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_21_R2; import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_21_R2;
import io.lumine.cosmetics.nms.cosmetic.VolatileSprayHelper; import io.lumine.cosmetics.nms.cosmetic.VolatileSprayHelper;
import io.lumine.cosmetics.types.sprays.types.MapSpray;
import lombok.Getter; import lombok.Getter;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
...@@ -35,7 +35,7 @@ public class VolatileSprayImpl implements VolatileSprayHelper { ...@@ -35,7 +35,7 @@ public class VolatileSprayImpl implements VolatileSprayHelper {
private static final MapMeta mapMeta = (MapMeta) map.getItemMeta(); private static final MapMeta mapMeta = (MapMeta) map.getItemMeta();
@Override @Override
public int drawSpray(Spray spray, Location location, BlockFace face, int rotation) { public int drawMapSpray(MapSpray spray, Location location, BlockFace face, int rotation) {
var world = ((CraftWorld) location.getWorld()).getHandle(); var world = ((CraftWorld) location.getWorld()).getHandle();
var pos = new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()); var pos = new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ());
......
...@@ -4,6 +4,7 @@ import io.lumine.cosmetics.MCCosmeticsPlugin; ...@@ -4,6 +4,7 @@ import io.lumine.cosmetics.MCCosmeticsPlugin;
import io.lumine.cosmetics.types.sprays.Spray; import io.lumine.cosmetics.types.sprays.Spray;
import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_21_R3; import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_21_R3;
import io.lumine.cosmetics.nms.cosmetic.VolatileSprayHelper; import io.lumine.cosmetics.nms.cosmetic.VolatileSprayHelper;
import io.lumine.cosmetics.types.sprays.types.MapSpray;
import lombok.Getter; import lombok.Getter;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
...@@ -35,7 +36,7 @@ public class VolatileSprayImpl implements VolatileSprayHelper { ...@@ -35,7 +36,7 @@ public class VolatileSprayImpl implements VolatileSprayHelper {
private static final MapMeta mapMeta = (MapMeta) map.getItemMeta(); private static final MapMeta mapMeta = (MapMeta) map.getItemMeta();
@Override @Override
public int drawSpray(Spray spray, Location location, BlockFace face, int rotation) { public int drawMapSpray(MapSpray spray, Location location, BlockFace face, int rotation) {
var world = ((CraftWorld) location.getWorld()).getHandle(); var world = ((CraftWorld) location.getWorld()).getHandle();
var pos = new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()); var pos = new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ());
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment