13
0

Add basic particle system
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful

Dieser Commit ist enthalten in:
yoyosource 2024-05-24 17:21:49 +02:00
Ursprung f5da11a319
Commit 40b0567333
13 geänderte Dateien mit 838 neuen und 3 gelöschten Zeilen

Datei anzeigen

@ -29,7 +29,7 @@ import de.steamwar.lobby.jumpandrun.JumpAndRunCommand;
import de.steamwar.lobby.listener.*;
import de.steamwar.lobby.map.CustomMapCommand;
import de.steamwar.lobby.particle.ParticleListener;
import de.steamwar.lobby.special.advent.AdventsCalendar;
import de.steamwar.lobby.particlenew.ParticleManager;
import de.steamwar.lobby.team.TeamPlayer;
import de.steamwar.message.Message;
import org.bukkit.plugin.java.JavaPlugin;
@ -75,8 +75,10 @@ public class LobbySystem extends JavaPlugin {
new TeleporterListener();
new TeamPlayer();
new ParticleManager();
// EggHunt.init();
AdventsCalendar.init();
// AdventsCalendar.init();
new AlphaWall(l -> l.getX() > 999, AlphaWall.REFLECT_X);
new AlphaWall(l -> l.getX() < 2977, AlphaWall.REFLECT_X);

Datei anzeigen

@ -23,6 +23,7 @@ import de.steamwar.lobby.LobbySystem;
import de.steamwar.lobby.jumpandrun.JumpAndRun;
import de.steamwar.lobby.listener.BasicListener;
import de.steamwar.lobby.listener.PlayerSpawn;
import de.steamwar.lobby.particlenew.ParticleManager;
import de.steamwar.lobby.util.LobbyPlayer;
import de.steamwar.sql.SteamwarUser;
import de.steamwar.sql.UserPerm;
@ -75,7 +76,8 @@ public class ParticleListener extends BasicListener {
if (!PlayerSpawn.PARTICLE.equals(event.getItem())) return;
event.setCancelled(true);
ParticleInventory.openInventory(player, true);
// ParticleInventory.openInventory(player, true);
ParticleManager.get(player).open();
}
@EventHandler

Datei anzeigen

@ -0,0 +1,130 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2024 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.lobby.particlenew;
import de.steamwar.inventory.SWInventory;
import de.steamwar.inventory.SWItem;
import de.steamwar.inventory.SWListInv;
import de.steamwar.sql.SteamwarUser;
import de.steamwar.sql.UserPerm;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
public class ParticleDesign implements Serializable {
private ParticleElement[] elements = new ParticleElement[] {null, null, null, null, null};
public boolean isEmpty() {
for (int i = 0; i < elements.length; i++) {
if (elements[i] != null) return false;
}
return true;
}
public void open(Player player, Runnable back) {
open(player, back, -1);
}
private void open(Player player, Runnable back, int selected) {
SteamwarUser user = SteamwarUser.get(player.getUniqueId());
int allowedElements = 1;
if (user.getTeam() != 0) allowedElements++;
if (user.getOnlinetime() / 3600.0 > 1000) allowedElements++;
if (user.prefix() != UserPerm.emptyPrefix) allowedElements += 2;
SWInventory swInventory = new SWInventory(player, 27, "§0Particle - Design");
swInventory.setItem(0, new SWItem(Material.ARROW, "§fBack", clickType -> {
back.run();
}));
for (int i = 0; i < elements.length; i++) {
final int elementIndex = i;
ParticleElement element = elements[i];
if (i >= allowedElements) {
swInventory.setItem(i + 2, new SWItem(Material.RED_STAINED_GLASS_PANE, "§c< LOCKED SLOT >", clickType -> {
}));
} else if (element == null) {
swInventory.setItem(i + 2, new SWItem(Material.WHITE_STAINED_GLASS_PANE, "§f< EMPTY SLOT >", Arrays.asList("§eClick to create"), false, clickType -> {
openElementSelector(player, () -> open(player, back, elementIndex), particleElement -> {
elements[elementIndex] = particleElement;
});
}));
} else {
SWItem swItem = element.toItem(player);
swItem.setLore(Arrays.asList("§eClick to edit"));
swItem.setCallback(clickType -> {
if (selected == elementIndex) {
openElementSelector(player, () -> open(player, back, elementIndex), particleElement -> {
elements[elementIndex] = particleElement;
});
} else {
open(player, back, elementIndex);
}
});
swInventory.setItem(i + 2, swItem);
}
}
for (int i = 0; i < 9; i++) {
swInventory.setItem(i + 9, new SWItem(Material.GRAY_STAINED_GLASS_PANE, "§8", clickType -> {
}));
}
if (selected != -1 && elements[selected] != null) {
SWItem[] items = elements[selected].items(player, () -> open(player, back, selected));
for (int i = 0; i < items.length; i++) {
swInventory.setItem(i + 9, items[i]);
}
swInventory.setItem(21, new SWItem(elements[selected].always ? Material.FEATHER : Material.GOLDEN_BOOTS, elements[selected].always ? "§7Always" : "§7Only while Moving", Arrays.asList("§eClick to change"), false, clickType -> {
elements[selected].always = !elements[selected].always;
open(player, back, selected);
}));
// swInventory.setItem(23); // TODO: Add other thing!
}
swInventory.open();
}
private void openElementSelector(Player player, Runnable back, Consumer<ParticleElement> consumer) {
SteamwarUser user = SteamwarUser.get(player.getUniqueId());
double playtime = user.getOnlinetime();
List<SWListInv.SWListEntry<ParticleElements>> elements = new ArrayList<>();
for (ParticleElements value : ParticleElements.values()) {
if (value.permissionCheck.hasPermission(player, user, playtime)) {
elements.add(new SWListInv.SWListEntry<>(new SWItem(value.material, value.name), value));
}
}
SWListInv<ParticleElements> swListInv = new SWListInv<>(player, "§0Particle - Element", elements, (clickType, particleElements) -> {
consumer.accept(particleElements.elementSupplier.get());
back.run();
});
swListInv.addCloseRunnable(back);
swListInv.open();
}
}

Datei anzeigen

@ -0,0 +1,84 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2024 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.lobby.particlenew;
import de.steamwar.inventory.SWItem;
import de.steamwar.sql.SteamwarUser;
import de.steamwar.sql.UserPerm;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import java.io.Serializable;
import java.util.function.Consumer;
public abstract class ParticleElement implements Serializable {
protected boolean always = false;
protected SpawnBehaviour spawnBehaviour = SpawnBehaviour.OFF;
public abstract void spawn(Player player, double deg, boolean isMoving);
public abstract SWItem toItem(Player player);
public abstract SWItem[] items(Player player, Runnable back);
public final void display(Player source, boolean isMoving, Consumer<Player> spawner) {
if (!always && !isMoving) return;
switch (spawnBehaviour) {
case OFF:
break;
case FLOOR:
if (source.getLocation().clone().add(0, -0.5, 0).getBlock().getType().isAir()) {
return;
}
break;
case NOT_FLOOR:
if (!source.getLocation().clone().add(0, -0.5, 0).getBlock().getType().isAir()) {
return;
}
break;
case FLYING:
if (!source.isGliding()) {
return;
}
break;
case NOT_FLYING:
if (source.isGliding()) {
return;
}
break;
}
SteamwarUser sourceUser = SteamwarUser.get(source.getUniqueId());
boolean isServerTeam = sourceUser.hasPerm(UserPerm.TEAM);
Bukkit.getOnlinePlayers().forEach(player -> {
PlayerParticles particles = ParticleManager.get(player);
SteamwarUser playerUser = SteamwarUser.get(player.getUniqueId());
if (particles.isShowOthers() && sourceUser.getTeam() != playerUser.getTeam() && !isServerTeam) {
spawner.accept(player);
} else if (particles.isShowTeam() && sourceUser.getTeam() == playerUser.getTeam()) {
spawner.accept(player);
} else if (particles.isShowServerteam() && isServerTeam) {
spawner.accept(player);
}
});
}
}

Datei anzeigen

@ -0,0 +1,53 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2024 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.lobby.particlenew;
import de.steamwar.lobby.particlenew.elements.SimpleParticleElement;
import de.steamwar.sql.SteamwarUser;
import lombok.RequiredArgsConstructor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import java.util.function.Supplier;
@RequiredArgsConstructor
public enum ParticleElements {
NONE(Material.BARRIER, "None", all(), () -> null),
SIMPLE(Material.BONE_MEAL, "§7Simple", all(), SimpleParticleElement::new),
// CLOUD(Material.FEATHER, "Cloud", all(), () -> null), // TODO: Implement further
;
public final Material material;
public final String name;
public final PermissionCheck permissionCheck;
public final Supplier<ParticleElement> elementSupplier;
public static PermissionCheck all() {
return (player, user, playTime) -> {
return true;
};
}
public interface PermissionCheck {
boolean hasPermission(Player player, SteamwarUser user, double playTime);
}
}

Datei anzeigen

@ -0,0 +1,52 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2024 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.lobby.particlenew;
import de.steamwar.lobby.listener.BasicListener;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import java.util.HashMap;
import java.util.Map;
public class ParticleManager extends BasicListener {
private static final Map<Player, PlayerParticles> PARTICLES_MAP = new HashMap<>();
public static PlayerParticles get(Player player) {
return PARTICLES_MAP.get(player);
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
// TODO: Load from DB!
PlayerParticles particles = new PlayerParticles();
particles.setPlayer(event.getPlayer());
PARTICLES_MAP.put(event.getPlayer(), particles);
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
PlayerParticles particles = PARTICLES_MAP.remove(event.getPlayer());
// TODO: Save to DB!
}
}

Datei anzeigen

@ -0,0 +1,139 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2024 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.lobby.particlenew;
import de.steamwar.inventory.SWInventory;
import de.steamwar.inventory.SWItem;
import de.steamwar.sql.SteamwarUser;
import de.steamwar.sql.UserPerm;
import lombok.Getter;
import lombok.Setter;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import java.io.Serializable;
import java.util.Arrays;
public class PlayerParticles implements Serializable {
@Setter
private transient Player player;
private ParticleDesign[] particles = new ParticleDesign[] {
new ParticleDesign(),
new ParticleDesign(),
new ParticleDesign(),
new ParticleDesign(),
new ParticleDesign(),
new ParticleDesign(),
new ParticleDesign()
};
private int selectedParticle = -1;
@Getter
private boolean showOthers = false;
@Getter
private boolean showTeam = true;
@Getter
private boolean showServerteam = true;
public void open() {
SteamwarUser user = SteamwarUser.get(player.getUniqueId());
boolean hasTeam = user.getTeam() != 0;
boolean isServerTeam = user.hasPerm(UserPerm.COLOR_CHAT);
SWInventory swInventory = new SWInventory(player, 36, "§0Particles");
for (int i = 0; i < particles.length; i++) {
final int particleIndex = i;
boolean locked = false;
if (i > 1 && !hasTeam && !isServerTeam) {
locked = true;
}
if (i > 3 && !isServerTeam) {
locked = true;
}
swInventory.setItem(i + 10 + 9, new SWItem(SWItem.getDye(8), "§7", clickType -> {
}));
boolean hasParticle = particles[particleIndex].isEmpty();
if (locked) {
swInventory.setItem(i + 10, new SWItem(Material.RED_STAINED_GLASS_PANE, "§c< LOCKED SLOT >", clickType -> {
}));
} else if (hasParticle) {
swInventory.setItem(i + 10, new SWItem(Material.WHITE_STAINED_GLASS_PANE, "§f< EMPTY SLOT >", Arrays.asList("§eClick to create"), false, clickType -> {
particles[particleIndex].open(player, this::open);
}));
} else {
swInventory.setItem(i + 10, new SWItem(Material.LIME_STAINED_GLASS_PANE, "§a< FILLED SLOT >", Arrays.asList("§eClick to edit"), false, clickType -> {
particles[particleIndex].open(player, this::open);
}));
if (selectedParticle == i) {
swInventory.setItem(i + 10 + 9, new SWItem(SWItem.getDye(10), "§aSelected", Arrays.asList("§eClick to turn off"), false, clickType -> {
selectedParticle = -1;
open();
}));
} else {
swInventory.setItem(i + 10 + 9, new SWItem(SWItem.getDye(1), "§cNot Selected", Arrays.asList("§eClick to Select"), false, clickType -> {
selectedParticle = particleIndex;
open();
}));
}
}
}
swInventory.setItem(31, new SWItem(Material.CAULDRON, "§fSettings", clickType -> {
openSettings();
}));
swInventory.open();
}
private void openSettings() {
SWInventory swInventory = new SWInventory(player, 36, "§0Particles - Settings");
swInventory.setItem(0, new SWItem(Material.ARROW, "§fBack", clickType -> {
open();
}));
swInventory.setItem(11, new SWItem(Material.SKELETON_SKULL, "§fOthers", clickType -> {}));
swInventory.setItem(20, new SWItem(SWItem.getDye(showOthers ? 10 : 1), showOthers ? "§aShown" : "§cHidden", Arrays.asList("§eClick to toggle"), false, clickType -> {
showOthers = !showOthers;
openSettings();
}));
swInventory.setItem(13, new SWItem(Material.PLAYER_HEAD, "§fTeam", clickType -> {}));
swInventory.setItem(22, new SWItem(SWItem.getDye(showTeam ? 10 : 1), showTeam ? "§aShown" : "§cHidden", Arrays.asList("§eClick to toggle"), false, clickType -> {
showTeam = !showTeam;
openSettings();
}));
swInventory.setItem(15, new SWItem(Material.DRAGON_HEAD, "§fServerteam", clickType -> {}));
swInventory.setItem(24, new SWItem(SWItem.getDye(showServerteam ? 10 : 1), showServerteam ? "§aShown" : "§cHidden", Arrays.asList("§eClick to toggle"), false, clickType -> {
showServerteam = !showServerteam;
openSettings();
}));
swInventory.open();
}
}

Datei anzeigen

@ -0,0 +1,28 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2024 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.lobby.particlenew;
public enum SpawnBehaviour {
OFF,
FLOOR,
NOT_FLOOR,
FLYING,
NOT_FLYING,
}

Datei anzeigen

@ -0,0 +1,63 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2024 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.lobby.particlenew.elements;
import de.steamwar.inventory.SWItem;
import de.steamwar.lobby.particlenew.ParticleElement;
import de.steamwar.lobby.particlenew.settings.ParticleSetting;
import de.steamwar.lobby.particlenew.settings.TimeSetting;
import de.steamwar.lobby.particlenew.settings.VelocitySetting;
import de.steamwar.lobby.particlenew.settings.YOffsetSetting;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Particle;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
public class SimpleParticleElement extends ParticleElement {
private Particle particle = Particle.ASH; // particle.getDataType()
private double yOffset = 0.0;
private Vector velocity = new Vector(0.0, 0.0, 0.0);
private double time = 0.0;
@Override
public void spawn(Player player, double deg, boolean isMoving) {
Location location = player.getLocation().clone().add(0, yOffset, 0);
display(player, isMoving, other -> {
other.spawnParticle(particle, location, 1, velocity.getX(), velocity.getY(), velocity.getZ(), time);
});
}
@Override
public SWItem toItem(Player player) {
return new SWItem(Material.BONE_MEAL, "§7Simple");
}
@Override
public SWItem[] items(Player player, Runnable back) {
return new SWItem[] {
ParticleSetting.item(player, back, particle, selected -> particle = selected),
YOffsetSetting.item(player, back, yOffset, value -> yOffset = value),
VelocitySetting.item(player, back, velocity, value -> velocity = value),
TimeSetting.item(player, back, time, value -> time = value),
};
}
}

Datei anzeigen

@ -0,0 +1,147 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2024 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.lobby.particlenew.settings;
import de.steamwar.inventory.SWItem;
import de.steamwar.inventory.SWListInv;
import lombok.experimental.UtilityClass;
import org.bukkit.Material;
import org.bukkit.Particle;
import org.bukkit.entity.Player;
import java.util.*;
import java.util.function.Consumer;
@UtilityClass
public class ParticleSetting {
private static final Map<Particle, Material> TO_ITEM_MAP = new HashMap<>();
static {
TO_ITEM_MAP.put(Particle.EXPLOSION_NORMAL, Material.TNT);
TO_ITEM_MAP.put(Particle.EXPLOSION_LARGE, Material.TNT_MINECART);
TO_ITEM_MAP.put(Particle.EXPLOSION_HUGE, Material.END_CRYSTAL);
TO_ITEM_MAP.put(Particle.FIREWORKS_SPARK, Material.FIREWORK_STAR);
TO_ITEM_MAP.put(Particle.WATER_BUBBLE, Material.PRISMARINE_CRYSTALS);
TO_ITEM_MAP.put(Particle.WATER_SPLASH, Material.SPLASH_POTION);
TO_ITEM_MAP.put(Particle.WATER_WAKE, Material.WARPED_BUTTON);
TO_ITEM_MAP.put(Particle.SUSPENDED, Material.POLISHED_BLACKSTONE_BUTTON);
TO_ITEM_MAP.put(Particle.SUSPENDED_DEPTH, Material.POLISHED_BLACKSTONE_BUTTON);
TO_ITEM_MAP.put(Particle.CRIT, Material.GOLDEN_SWORD);
TO_ITEM_MAP.put(Particle.CRIT_MAGIC, Material.DIAMOND_SWORD);
TO_ITEM_MAP.put(Particle.SMOKE_NORMAL, Material.COAL);
TO_ITEM_MAP.put(Particle.SMOKE_LARGE, Material.FIRE_CHARGE);
TO_ITEM_MAP.put(Particle.SPELL, Material.ENCHANTED_BOOK);
TO_ITEM_MAP.put(Particle.SPELL_INSTANT, Material.ENCHANTED_BOOK);
TO_ITEM_MAP.put(Particle.SPELL_MOB, Material.ENCHANTED_BOOK);
TO_ITEM_MAP.put(Particle.SPELL_MOB_AMBIENT, Material.ENCHANTED_BOOK);
TO_ITEM_MAP.put(Particle.SPELL_WITCH, Material.ENCHANTED_BOOK);
TO_ITEM_MAP.put(Particle.DRIP_WATER, Material.WATER_BUCKET);
TO_ITEM_MAP.put(Particle.DRIP_LAVA, Material.LAVA_BUCKET);
TO_ITEM_MAP.put(Particle.VILLAGER_ANGRY, Material.BONE);
TO_ITEM_MAP.put(Particle.VILLAGER_HAPPY, Material.EMERALD);
TO_ITEM_MAP.put(Particle.TOWN_AURA, Material.MYCELIUM);
TO_ITEM_MAP.put(Particle.NOTE, Material.NOTE_BLOCK);
TO_ITEM_MAP.put(Particle.PORTAL, Material.OBSERVER);
TO_ITEM_MAP.put(Particle.ENCHANTMENT_TABLE, Material.ENCHANTING_TABLE);
TO_ITEM_MAP.put(Particle.FLAME, Material.FLINT_AND_STEEL);
TO_ITEM_MAP.put(Particle.LAVA, Material.LAVA_BUCKET);
TO_ITEM_MAP.put(Particle.CLOUD, Material.BONE_MEAL);
// TODO: Redstone
TO_ITEM_MAP.put(Particle.SNOWBALL, Material.SNOWBALL);
TO_ITEM_MAP.put(Particle.SNOW_SHOVEL, Material.IRON_SHOVEL);
TO_ITEM_MAP.put(Particle.SLIME, Material.SLIME_BALL);
TO_ITEM_MAP.put(Particle.HEART, Material.GOLDEN_APPLE);
// TODO: ItemCrack
// TODO: BlockCrack
// TODO: BlockDust
TO_ITEM_MAP.put(Particle.WATER_DROP, Material.WATER_BUCKET);
TO_ITEM_MAP.put(Particle.MOB_APPEARANCE, Material.GHAST_SPAWN_EGG);
TO_ITEM_MAP.put(Particle.DRAGON_BREATH, Material.DRAGON_BREATH);
TO_ITEM_MAP.put(Particle.END_ROD, Material.END_ROD);
TO_ITEM_MAP.put(Particle.DAMAGE_INDICATOR, Material.IRON_SWORD);
TO_ITEM_MAP.put(Particle.SWEEP_ATTACK, Material.IRON_SWORD);
// TODO: FallingDust
TO_ITEM_MAP.put(Particle.TOTEM, Material.TOTEM_OF_UNDYING);
TO_ITEM_MAP.put(Particle.SPIT, Material.GHAST_TEAR);
TO_ITEM_MAP.put(Particle.SQUID_INK, Material.INK_SAC);
TO_ITEM_MAP.put(Particle.BUBBLE_POP, Material.PRISMARINE_CRYSTALS);
TO_ITEM_MAP.put(Particle.CURRENT_DOWN, Material.PRISMARINE_CRYSTALS);
TO_ITEM_MAP.put(Particle.BUBBLE_COLUMN_UP, Material.SOUL_SAND);
TO_ITEM_MAP.put(Particle.NAUTILUS, Material.NAUTILUS_SHELL);
TO_ITEM_MAP.put(Particle.DOLPHIN, Material.DOLPHIN_SPAWN_EGG);
TO_ITEM_MAP.put(Particle.SNEEZE, Material.GHAST_TEAR);
TO_ITEM_MAP.put(Particle.CAMPFIRE_COSY_SMOKE, Material.CAMPFIRE);
TO_ITEM_MAP.put(Particle.CAMPFIRE_SIGNAL_SMOKE, Material.CAMPFIRE);
TO_ITEM_MAP.put(Particle.COMPOSTER, Material.COMPOSTER);
TO_ITEM_MAP.put(Particle.FALLING_LAVA, Material.LAVA_BUCKET);
TO_ITEM_MAP.put(Particle.LANDING_LAVA, Material.LAVA_BUCKET);
TO_ITEM_MAP.put(Particle.FALLING_WATER, Material.WATER_BUCKET);
TO_ITEM_MAP.put(Particle.DRIPPING_HONEY, Material.HONEY_BOTTLE);
TO_ITEM_MAP.put(Particle.FALLING_HONEY, Material.HONEY_BOTTLE);
TO_ITEM_MAP.put(Particle.LANDING_HONEY, Material.HONEY_BOTTLE);
TO_ITEM_MAP.put(Particle.FALLING_NECTAR, Material.BEEHIVE);
TO_ITEM_MAP.put(Particle.SOUL_FIRE_FLAME, Material.SOUL_CAMPFIRE);
TO_ITEM_MAP.put(Particle.ASH, Material.COAL);
TO_ITEM_MAP.put(Particle.CRIMSON_SPORE, Material.CRIMSON_FUNGUS);
TO_ITEM_MAP.put(Particle.WARPED_SPORE, Material.WARPED_FUNGUS);
TO_ITEM_MAP.put(Particle.SOUL, Material.SOUL_SAND);
TO_ITEM_MAP.put(Particle.DRIPPING_OBSIDIAN_TEAR, Material.CRYING_OBSIDIAN);
TO_ITEM_MAP.put(Particle.FALLING_OBSIDIAN_TEAR, Material.CRYING_OBSIDIAN);
TO_ITEM_MAP.put(Particle.LANDING_OBSIDIAN_TEAR, Material.CRYING_OBSIDIAN);
TO_ITEM_MAP.put(Particle.REVERSE_PORTAL, Material.OBSERVER);
TO_ITEM_MAP.put(Particle.WHITE_ASH, Material.SUGAR);
// TODO: DustColorTransition
// TODO: Vibration
TO_ITEM_MAP.put(Particle.FALLING_SPORE_BLOSSOM, Material.SPORE_BLOSSOM);
TO_ITEM_MAP.put(Particle.SPORE_BLOSSOM_AIR, Material.SPORE_BLOSSOM);
TO_ITEM_MAP.put(Particle.SMALL_FLAME, Material.TORCH);
TO_ITEM_MAP.put(Particle.SNOWFLAKE, Material.SNOWBALL);
TO_ITEM_MAP.put(Particle.DRIPPING_DRIPSTONE_LAVA, Material.POINTED_DRIPSTONE);
TO_ITEM_MAP.put(Particle.FALLING_DRIPSTONE_LAVA, Material.POINTED_DRIPSTONE);
TO_ITEM_MAP.put(Particle.DRIPPING_DRIPSTONE_WATER, Material.POINTED_DRIPSTONE);
TO_ITEM_MAP.put(Particle.FALLING_DRIPSTONE_WATER, Material.POINTED_DRIPSTONE);
TO_ITEM_MAP.put(Particle.GLOW_SQUID_INK, Material.GLOW_INK_SAC);
TO_ITEM_MAP.put(Particle.GLOW, Material.GLOWSTONE_DUST);
TO_ITEM_MAP.put(Particle.WAX_ON, Material.HONEYCOMB);
TO_ITEM_MAP.put(Particle.WAX_OFF, Material.IRON_AXE);
TO_ITEM_MAP.put(Particle.ELECTRIC_SPARK, Material.LIGHTNING_ROD);
TO_ITEM_MAP.put(Particle.SCRAPE, Material.IRON_AXE);
TO_ITEM_MAP.put(Particle.SCULK_SOUL, Material.SCULK);
// TODO: SculkCharge
TO_ITEM_MAP.put(Particle.SCULK_CHARGE_POP, Material.SCULK);
// TODO: Shriek
}
public SWItem item(Player player, Runnable back, Particle current, Consumer<Particle> selector) {
return new SWItem(TO_ITEM_MAP.get(current), "§7Particle: " + current.name(), Arrays.asList("§eClick to change"), false, clickType -> {
List<SWListInv.SWListEntry<Particle>> particles = new ArrayList<>();
TO_ITEM_MAP.forEach((particle, material) -> {
particles.add(new SWListInv.SWListEntry<>(new SWItem(material, "§7" + particle.name()), particle));
});
SWListInv<Particle> listInv = new SWListInv<>(player, "§0Particle - Select Particle", particles, (clickType1, particle) -> {
selector.accept(particle);
back.run();
});
listInv.addCloseCallback(clickType1 -> back.run());
listInv.open();
});
}
}

Datei anzeigen

@ -0,0 +1,48 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2024 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.lobby.particlenew.settings;
import de.steamwar.inventory.SWAnvilInv;
import de.steamwar.inventory.SWItem;
import lombok.experimental.UtilityClass;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import java.util.Arrays;
import java.util.function.Consumer;
@UtilityClass
public class TimeSetting {
public SWItem item(Player player, Runnable back, double current, Consumer<Double> selector) {
return new SWItem(Material.CLOCK, "§7Time: " + current, Arrays.asList("§eClick to change"), false, clickType -> {
SWAnvilInv anvilInv = new SWAnvilInv(player, "§0Particle - Select Time", current + "");
anvilInv.addCloseCallback(back);
anvilInv.setCallback(s -> {
double value = Double.parseDouble(s);
if (value < 0.0) value = 0.0;
if (value > 1.0) value = 1.0;
selector.accept(value);
back.run();
});
anvilInv.open();
});
}
}

Datei anzeigen

@ -0,0 +1,39 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2024 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.lobby.particlenew.settings;
import de.steamwar.inventory.SWItem;
import lombok.experimental.UtilityClass;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import java.util.Arrays;
import java.util.function.Consumer;
@UtilityClass
public class VelocitySetting {
public SWItem item(Player player, Runnable back, Vector current, Consumer<Vector> selector) {
return new SWItem(Material.FIREWORK_ROCKET, "§7Velocity - xz: " + current.getX() + " y: " + current.getY(), Arrays.asList("§eClick to change"), false, clickType -> {
// TODO: Implement menu!
});
}
}

Datei anzeigen

@ -0,0 +1,48 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2024 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.lobby.particlenew.settings;
import de.steamwar.inventory.SWAnvilInv;
import de.steamwar.inventory.SWItem;
import lombok.experimental.UtilityClass;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import java.util.Arrays;
import java.util.function.Consumer;
@UtilityClass
public class YOffsetSetting {
public SWItem item(Player player, Runnable back, double current, Consumer<Double> selector) {
return new SWItem(Material.MAP, "§7Y-Offset: " + current, Arrays.asList("§eClick to change"), false, clickType -> {
SWAnvilInv anvilInv = new SWAnvilInv(player, "§0Particle - Select Y-Offset", current + "");
anvilInv.addCloseCallback(back);
anvilInv.setCallback(s -> {
double value = Double.parseDouble(s);
if (value < 0.5) value = 0.5;
if (value > 2.2) value = 2.2;
selector.accept(value);
back.run();
});
anvilInv.open();
});
}
}