Dieser Commit ist enthalten in:
Ursprung
f5da11a319
Commit
40b0567333
@ -29,7 +29,7 @@ import de.steamwar.lobby.jumpandrun.JumpAndRunCommand;
|
|||||||
import de.steamwar.lobby.listener.*;
|
import de.steamwar.lobby.listener.*;
|
||||||
import de.steamwar.lobby.map.CustomMapCommand;
|
import de.steamwar.lobby.map.CustomMapCommand;
|
||||||
import de.steamwar.lobby.particle.ParticleListener;
|
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.lobby.team.TeamPlayer;
|
||||||
import de.steamwar.message.Message;
|
import de.steamwar.message.Message;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
@ -75,8 +75,10 @@ public class LobbySystem extends JavaPlugin {
|
|||||||
new TeleporterListener();
|
new TeleporterListener();
|
||||||
new TeamPlayer();
|
new TeamPlayer();
|
||||||
|
|
||||||
|
new ParticleManager();
|
||||||
|
|
||||||
// EggHunt.init();
|
// EggHunt.init();
|
||||||
AdventsCalendar.init();
|
// AdventsCalendar.init();
|
||||||
|
|
||||||
new AlphaWall(l -> l.getX() > 999, AlphaWall.REFLECT_X);
|
new AlphaWall(l -> l.getX() > 999, AlphaWall.REFLECT_X);
|
||||||
new AlphaWall(l -> l.getX() < 2977, AlphaWall.REFLECT_X);
|
new AlphaWall(l -> l.getX() < 2977, AlphaWall.REFLECT_X);
|
||||||
|
@ -23,6 +23,7 @@ import de.steamwar.lobby.LobbySystem;
|
|||||||
import de.steamwar.lobby.jumpandrun.JumpAndRun;
|
import de.steamwar.lobby.jumpandrun.JumpAndRun;
|
||||||
import de.steamwar.lobby.listener.BasicListener;
|
import de.steamwar.lobby.listener.BasicListener;
|
||||||
import de.steamwar.lobby.listener.PlayerSpawn;
|
import de.steamwar.lobby.listener.PlayerSpawn;
|
||||||
|
import de.steamwar.lobby.particlenew.ParticleManager;
|
||||||
import de.steamwar.lobby.util.LobbyPlayer;
|
import de.steamwar.lobby.util.LobbyPlayer;
|
||||||
import de.steamwar.sql.SteamwarUser;
|
import de.steamwar.sql.SteamwarUser;
|
||||||
import de.steamwar.sql.UserPerm;
|
import de.steamwar.sql.UserPerm;
|
||||||
@ -75,7 +76,8 @@ public class ParticleListener extends BasicListener {
|
|||||||
if (!PlayerSpawn.PARTICLE.equals(event.getItem())) return;
|
if (!PlayerSpawn.PARTICLE.equals(event.getItem())) return;
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
|
||||||
ParticleInventory.openInventory(player, true);
|
// ParticleInventory.openInventory(player, true);
|
||||||
|
ParticleManager.get(player).open();
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
130
src/de/steamwar/lobby/particlenew/ParticleDesign.java
Normale Datei
130
src/de/steamwar/lobby/particlenew/ParticleDesign.java
Normale Datei
@ -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();
|
||||||
|
}
|
||||||
|
}
|
84
src/de/steamwar/lobby/particlenew/ParticleElement.java
Normale Datei
84
src/de/steamwar/lobby/particlenew/ParticleElement.java
Normale Datei
@ -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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
53
src/de/steamwar/lobby/particlenew/ParticleElements.java
Normale Datei
53
src/de/steamwar/lobby/particlenew/ParticleElements.java
Normale Datei
@ -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);
|
||||||
|
}
|
||||||
|
}
|
52
src/de/steamwar/lobby/particlenew/ParticleManager.java
Normale Datei
52
src/de/steamwar/lobby/particlenew/ParticleManager.java
Normale Datei
@ -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!
|
||||||
|
}
|
||||||
|
}
|
139
src/de/steamwar/lobby/particlenew/PlayerParticles.java
Normale Datei
139
src/de/steamwar/lobby/particlenew/PlayerParticles.java
Normale Datei
@ -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();
|
||||||
|
}
|
||||||
|
}
|
28
src/de/steamwar/lobby/particlenew/SpawnBehaviour.java
Normale Datei
28
src/de/steamwar/lobby/particlenew/SpawnBehaviour.java
Normale Datei
@ -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,
|
||||||
|
}
|
@ -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),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
147
src/de/steamwar/lobby/particlenew/settings/ParticleSetting.java
Normale Datei
147
src/de/steamwar/lobby/particlenew/settings/ParticleSetting.java
Normale Datei
@ -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();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
48
src/de/steamwar/lobby/particlenew/settings/TimeSetting.java
Normale Datei
48
src/de/steamwar/lobby/particlenew/settings/TimeSetting.java
Normale Datei
@ -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();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
39
src/de/steamwar/lobby/particlenew/settings/VelocitySetting.java
Normale Datei
39
src/de/steamwar/lobby/particlenew/settings/VelocitySetting.java
Normale Datei
@ -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!
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
48
src/de/steamwar/lobby/particlenew/settings/YOffsetSetting.java
Normale Datei
48
src/de/steamwar/lobby/particlenew/settings/YOffsetSetting.java
Normale Datei
@ -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();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
In neuem Issue referenzieren
Einen Benutzer sperren