Reformat code

This commit is contained in:
Ethanell 2020-09-07 23:40:57 +02:00
parent 53f1508a01
commit 20b545b93d
108 changed files with 10123 additions and 9809 deletions

View file

@ -1,13 +1,13 @@
version: "3.0" version: "3.0"
services: services:
loup-garou: loup-garou:
build: build:
context: . context: .
dockerfile: ./docker/Dockerfile dockerfile: ./docker/Dockerfile
args: args:
SPIGOT_VERSION: 1.15.1 SPIGOT_VERSION: 1.15.1
volumes: volumes:
- ./minecraft_data:/minecraft - ./minecraft_data:/minecraft
ports: ports:
- 25565:25565 - 25565:25565

View file

@ -1,4 +1,4 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>fr.leomelki</groupId> <groupId>fr.leomelki</groupId>

View file

@ -2,115 +2,114 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package fr.leomelki.com.comphenix.packetwrapper; package fr.leomelki.com.comphenix.packetwrapper;
import java.lang.reflect.InvocationTargetException;
import org.bukkit.entity.Player;
import com.comphenix.protocol.PacketType; import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.google.common.base.Objects; import com.google.common.base.Objects;
import org.bukkit.entity.Player;
import java.lang.reflect.InvocationTargetException;
public abstract class AbstractPacket { public abstract class AbstractPacket {
// The packet we will be modifying // The packet we will be modifying
protected PacketContainer handle; protected PacketContainer handle;
/** /**
* Constructs a new strongly typed wrapper for the given packet. * Constructs a new strongly typed wrapper for the given packet.
* *
* @param handle - handle to the raw packet data. * @param handle - handle to the raw packet data.
* @param type - the packet type. * @param type - the packet type.
*/ */
protected AbstractPacket(PacketContainer handle, PacketType type) { protected AbstractPacket(PacketContainer handle, PacketType type) {
// Make sure we're given a valid packet // Make sure we're given a valid packet
if (handle == null) if (handle == null)
throw new IllegalArgumentException("Packet handle cannot be NULL."); throw new IllegalArgumentException("Packet handle cannot be NULL.");
if (!Objects.equal(handle.getType(), type)) if (!Objects.equal(handle.getType(), type))
throw new IllegalArgumentException(handle.getHandle() throw new IllegalArgumentException(handle.getHandle()
+ " is not a packet of type " + type); + " is not a packet of type " + type);
this.handle = handle; this.handle = handle;
} }
/** /**
* Retrieve a handle to the raw packet data. * Retrieve a handle to the raw packet data.
* *
* @return Raw packet data. * @return Raw packet data.
*/ */
public PacketContainer getHandle() { public PacketContainer getHandle() {
return handle; return handle;
} }
/** /**
* Send the current packet to the given receiver. * Send the current packet to the given receiver.
* *
* @param receiver - the receiver. * @param receiver - the receiver.
* @throws RuntimeException If the packet cannot be sent. * @throws RuntimeException If the packet cannot be sent.
*/ */
public void sendPacket(Player receiver) { public void sendPacket(Player receiver) {
if(receiver == null) if (receiver == null)
return; return;
try { try {
ProtocolLibrary.getProtocolManager().sendServerPacket(receiver, ProtocolLibrary.getProtocolManager().sendServerPacket(receiver,
getHandle()); getHandle());
} catch (InvocationTargetException e) { } catch (InvocationTargetException e) {
throw new RuntimeException("Cannot send packet.", e); throw new RuntimeException("Cannot send packet.", e);
} }
} }
/** /**
* Send the current packet to all online players. * Send the current packet to all online players.
*/ */
public void broadcastPacket() { public void broadcastPacket() {
ProtocolLibrary.getProtocolManager().broadcastServerPacket(getHandle()); ProtocolLibrary.getProtocolManager().broadcastServerPacket(getHandle());
} }
/** /**
* Simulate receiving the current packet from the given sender. * Simulate receiving the current packet from the given sender.
* *
* @param sender - the sender. * @param sender - the sender.
* @throws RuntimeException If the packet cannot be received. * @throws RuntimeException If the packet cannot be received.
* @deprecated Misspelled. recieve to receive * @deprecated Misspelled. recieve to receive
* @see #receivePacket(Player) * @see #receivePacket(Player)
*/ */
@Deprecated @Deprecated
public void recievePacket(Player sender) { public void recievePacket(Player sender) {
try { try {
ProtocolLibrary.getProtocolManager().recieveClientPacket(sender, ProtocolLibrary.getProtocolManager().recieveClientPacket(sender,
getHandle()); getHandle());
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException("Cannot recieve packet.", e); throw new RuntimeException("Cannot recieve packet.", e);
} }
} }
/** /**
* Simulate receiving the current packet from the given sender. * Simulate receiving the current packet from the given sender.
* *
* @param sender - the sender. * @param sender - the sender.
* @throws RuntimeException if the packet cannot be received. * @throws RuntimeException if the packet cannot be received.
*/ */
public void receivePacket(Player sender) { public void receivePacket(Player sender) {
try { try {
ProtocolLibrary.getProtocolManager().recieveClientPacket(sender, ProtocolLibrary.getProtocolManager().recieveClientPacket(sender,
getHandle()); getHandle());
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException("Cannot receive packet.", e); throw new RuntimeException("Cannot receive packet.", e);
} }
} }
} }

View file

@ -2,17 +2,17 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
@ -21,8 +21,8 @@ package fr.leomelki.com.comphenix.packetwrapper;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
public class PacketWrapper extends JavaPlugin { public class PacketWrapper extends JavaPlugin {
@Override @Override
public void onEnable() { public void onEnable() {
// We don't really do much ... // We don't really do much ...
} }
} }

View file

@ -2,103 +2,102 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package fr.leomelki.com.comphenix.packetwrapper; package fr.leomelki.com.comphenix.packetwrapper;
import java.util.Arrays;
import com.comphenix.protocol.PacketType; import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.wrappers.EnumWrappers; import com.comphenix.protocol.wrappers.EnumWrappers;
import com.comphenix.protocol.wrappers.EnumWrappers.ChatType; import com.comphenix.protocol.wrappers.EnumWrappers.ChatType;
import com.comphenix.protocol.wrappers.WrappedChatComponent; import com.comphenix.protocol.wrappers.WrappedChatComponent;
import java.util.Arrays;
public class WrapperPlayServerChat extends AbstractPacket { public class WrapperPlayServerChat extends AbstractPacket {
public static final PacketType TYPE = PacketType.Play.Server.CHAT; public static final PacketType TYPE = PacketType.Play.Server.CHAT;
public WrapperPlayServerChat() { public WrapperPlayServerChat() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerChat(PacketContainer packet) { public WrapperPlayServerChat(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
/** /**
* Retrieve the chat message. * Retrieve the chat message.
* <p> * <p>
* Limited to 32767 bytes * Limited to 32767 bytes
* *
* @return The current message * @return The current message
*/ */
public WrappedChatComponent getMessage() { public WrappedChatComponent getMessage() {
return handle.getChatComponents().read(0); return handle.getChatComponents().read(0);
} }
/** /**
* Set the message. * Set the message.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setMessage(WrappedChatComponent value) { public void setMessage(WrappedChatComponent value) {
handle.getChatComponents().write(0, value); handle.getChatComponents().write(0, value);
} }
public ChatType getChatType() { public ChatType getChatType() {
return handle.getChatTypes().read(0); return handle.getChatTypes().read(0);
} }
public void setChatType(ChatType type) { public void setChatType(ChatType type) {
handle.getChatTypes().write(0, type); handle.getChatTypes().write(0, type);
} }
/** /**
* Retrieve Position. * Retrieve Position.
* <p> * <p>
* Notes: 0 - Chat (chat box) ,1 - System Message (chat box), 2 - Above * Notes: 0 - Chat (chat box) ,1 - System Message (chat box), 2 - Above
* action bar * action bar
* *
* @return The current Position * @return The current Position
* @deprecated Magic values replaced by enum * @deprecated Magic values replaced by enum
*/ */
@Deprecated @Deprecated
public byte getPosition() { public byte getPosition() {
Byte position = handle.getBytes().readSafely(0); Byte position = handle.getBytes().readSafely(0);
if (position != null) { if (position != null) {
return position; return position;
} else { } else {
return getChatType().getId(); return getChatType().getId();
} }
} }
/** /**
* Set Position. * Set Position.
* *
* @param value - new value. * @param value - new value.
* @deprecated Magic values replaced by enum * @deprecated Magic values replaced by enum
*/ */
@Deprecated @Deprecated
public void setPosition(byte value) { public void setPosition(byte value) {
handle.getBytes().writeSafely(0, value); handle.getBytes().writeSafely(0, value);
if (EnumWrappers.getChatTypeClass() != null) if (EnumWrappers.getChatTypeClass() != null) {
{ Arrays.stream(ChatType.values()).filter(t -> t.getId() == value).findAny()
Arrays.stream(ChatType.values()).filter(t -> t.getId() == value).findAny() .ifPresent(t -> handle.getChatTypes().writeSafely(0, t));
.ifPresent(t -> handle.getChatTypes().writeSafely(0, t)); }
} }
}
} }

View file

@ -2,17 +2,17 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
@ -25,159 +25,159 @@ import com.comphenix.protocol.wrappers.MinecraftKey;
public class WrapperPlayServerCustomSoundEffect extends AbstractPacket { public class WrapperPlayServerCustomSoundEffect extends AbstractPacket {
public static final PacketType TYPE = public static final PacketType TYPE =
PacketType.Play.Server.CUSTOM_SOUND_EFFECT; PacketType.Play.Server.CUSTOM_SOUND_EFFECT;
public WrapperPlayServerCustomSoundEffect() { public WrapperPlayServerCustomSoundEffect() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerCustomSoundEffect(PacketContainer packet) { public WrapperPlayServerCustomSoundEffect(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
/** /**
* Retrieve Sound Name. * Retrieve Sound Name.
* <p> * <p>
* Notes: all known sound effect names can be seen here. * Notes: all known sound effect names can be seen here.
* *
* @return The current Sound Name * @return The current Sound Name
*/ */
public MinecraftKey getSoundName() { public MinecraftKey getSoundName() {
return handle.getMinecraftKeys().read(0); return handle.getMinecraftKeys().read(0);
} }
/** /**
* Set Sound Name. * Set Sound Name.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setSoundName(MinecraftKey value) { public void setSoundName(MinecraftKey value) {
handle.getMinecraftKeys().write(0, value); handle.getMinecraftKeys().write(0, value);
} }
/** /**
* Retrieve Sound Category. * Retrieve Sound Category.
* <p> * <p>
* Notes: the category that this sound will be played from (current * Notes: the category that this sound will be played from (current
* categories) * categories)
* *
* @return The current Sound Category * @return The current Sound Category
*/ */
public SoundCategory getSoundCategory() { public SoundCategory getSoundCategory() {
return handle.getSoundCategories().read(0); return handle.getSoundCategories().read(0);
} }
/** /**
* Set Sound Category. * Set Sound Category.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setSoundCategory(SoundCategory value) { public void setSoundCategory(SoundCategory value) {
handle.getSoundCategories().write(0, value); handle.getSoundCategories().write(0, value);
} }
/** /**
* Retrieve Effect Position X. * Retrieve Effect Position X.
* <p> * <p>
* Notes: effect X multiplied by 8 (fixed-point number with only 3 bits * Notes: effect X multiplied by 8 (fixed-point number with only 3 bits
* dedicated to the fractional part) * dedicated to the fractional part)
* *
* @return The current Effect Position X * @return The current Effect Position X
*/ */
public int getX() { public int getX() {
return handle.getIntegers().read(0); return handle.getIntegers().read(0);
} }
/** /**
* Set Effect Position X. * Set Effect Position X.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setX(int value) { public void setX(int value) {
handle.getIntegers().write(0, value); handle.getIntegers().write(0, value);
} }
/** /**
* Retrieve Effect Position Y. * Retrieve Effect Position Y.
* <p> * <p>
* Notes: effect Y multiplied by 8 (fixed-point number with only 3 bits * Notes: effect Y multiplied by 8 (fixed-point number with only 3 bits
* dedicated to the fractional part) * dedicated to the fractional part)
* *
* @return The current Effect Position Y * @return The current Effect Position Y
*/ */
public int getY() { public int getY() {
return handle.getIntegers().read(1); return handle.getIntegers().read(1);
} }
/** /**
* Set Effect Position Y. * Set Effect Position Y.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setY(int value) { public void setY(int value) {
handle.getIntegers().write(1, value); handle.getIntegers().write(1, value);
} }
/** /**
* Retrieve Effect Position Z. * Retrieve Effect Position Z.
* <p> * <p>
* Notes: effect Z multiplied by 8 (fixed-point number with only 3 bits * Notes: effect Z multiplied by 8 (fixed-point number with only 3 bits
* dedicated to the fractional part) * dedicated to the fractional part)
* *
* @return The current Effect Position Z * @return The current Effect Position Z
*/ */
public int getZ() { public int getZ() {
return handle.getIntegers().read(2); return handle.getIntegers().read(2);
} }
/** /**
* Set Effect Position Z. * Set Effect Position Z.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setZ(int value) { public void setZ(int value) {
handle.getIntegers().write(2, value); handle.getIntegers().write(2, value);
} }
/** /**
* Retrieve Volume. * Retrieve Volume.
* <p> * <p>
* Notes: 1 is 100%, can be more * Notes: 1 is 100%, can be more
* *
* @return The current Volume * @return The current Volume
*/ */
public float getVolume() { public float getVolume() {
return handle.getFloat().read(0); return handle.getFloat().read(0);
} }
/** /**
* Set Volume. * Set Volume.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setVolume(float value) { public void setVolume(float value) {
handle.getFloat().write(0, value); handle.getFloat().write(0, value);
} }
/** /**
* Retrieve Pitch. * Retrieve Pitch.
* <p> * <p>
* Notes: 63 is 100%, can be more * Notes: 63 is 100%, can be more
* *
* @return The current Pitch * @return The current Pitch
*/ */
public float getPitch() { public float getPitch() {
return handle.getFloat().read(1); return handle.getFloat().read(1);
} }
/** /**
* Set Pitch. * Set Pitch.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setPitch(float value) { public void setPitch(float value) {
handle.getFloat().write(1, value); handle.getFloat().write(1, value);
} }
} }

View file

@ -2,78 +2,77 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package fr.leomelki.com.comphenix.packetwrapper; package fr.leomelki.com.comphenix.packetwrapper;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import com.comphenix.protocol.PacketType; import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent; import com.comphenix.protocol.events.PacketEvent;
import org.bukkit.World;
import org.bukkit.entity.Entity;
public class WrapperPlayServerEntity extends AbstractPacket { public class WrapperPlayServerEntity extends AbstractPacket {
public static final PacketType TYPE = PacketType.Play.Server.ENTITY; public static final PacketType TYPE = PacketType.Play.Server.ENTITY;
public WrapperPlayServerEntity() { public WrapperPlayServerEntity() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerEntity(PacketContainer packet) { public WrapperPlayServerEntity(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
/** /**
* Retrieve Entity ID. * Retrieve Entity ID.
* <p> * <p>
* Notes: entity's ID * Notes: entity's ID
* *
* @return The current Entity ID * @return The current Entity ID
*/ */
public int getEntityID() { public int getEntityID() {
return handle.getIntegers().read(0); return handle.getIntegers().read(0);
} }
/** /**
* Set Entity ID. * Set Entity ID.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setEntityID(int value) { public void setEntityID(int value) {
handle.getIntegers().write(0, value); handle.getIntegers().write(0, value);
} }
/** /**
* Retrieve the entity of the painting that will be spawned. * Retrieve the entity of the painting that will be spawned.
* *
* @param world - the current world of the entity. * @param world - the current world of the entity.
* @return The spawned entity. * @return The spawned entity.
*/ */
public Entity getEntity(World world) { public Entity getEntity(World world) {
return handle.getEntityModifier(world).read(0); return handle.getEntityModifier(world).read(0);
} }
/** /**
* Retrieve the entity of the painting that will be spawned. * Retrieve the entity of the painting that will be spawned.
* *
* @param event - the packet event. * @param event - the packet event.
* @return The spawned entity. * @return The spawned entity.
*/ */
public Entity getEntity(PacketEvent event) { public Entity getEntity(PacketEvent event) {
return getEntity(event.getPlayer().getWorld()); return getEntity(event.getPlayer().getWorld());
} }
} }

View file

@ -2,17 +2,17 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
@ -22,46 +22,46 @@ import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
public class WrapperPlayServerEntityDestroy extends AbstractPacket { public class WrapperPlayServerEntityDestroy extends AbstractPacket {
public static final PacketType TYPE = PacketType.Play.Server.ENTITY_DESTROY; public static final PacketType TYPE = PacketType.Play.Server.ENTITY_DESTROY;
public WrapperPlayServerEntityDestroy() { public WrapperPlayServerEntityDestroy() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerEntityDestroy(PacketContainer packet) { public WrapperPlayServerEntityDestroy(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
/** /**
* Retrieve Count. * Retrieve Count.
* <p> * <p>
* Notes: length of following array * Notes: length of following array
* *
* @return The current Count * @return The current Count
*/ */
public int getCount() { public int getCount() {
return handle.getIntegerArrays().read(0).length; return handle.getIntegerArrays().read(0).length;
} }
/** /**
* Retrieve Entity IDs. * Retrieve Entity IDs.
* <p> * <p>
* Notes: the list of entities of destroy * Notes: the list of entities of destroy
* *
* @return The current Entity IDs * @return The current Entity IDs
*/ */
public int[] getEntityIDs() { public int[] getEntityIDs() {
return handle.getIntegerArrays().read(0); return handle.getIntegerArrays().read(0);
} }
/** /**
* Set Entity IDs. * Set Entity IDs.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setEntityIds(int[] value) { public void setEntityIds(int[] value) {
handle.getIntegerArrays().write(0, value); handle.getIntegerArrays().write(0, value);
} }
} }

View file

@ -2,109 +2,108 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package fr.leomelki.com.comphenix.packetwrapper; package fr.leomelki.com.comphenix.packetwrapper;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import org.bukkit.inventory.ItemStack;
import com.comphenix.protocol.PacketType; import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent; import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.wrappers.EnumWrappers.ItemSlot; import com.comphenix.protocol.wrappers.EnumWrappers.ItemSlot;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import org.bukkit.inventory.ItemStack;
public class WrapperPlayServerEntityEquipment extends AbstractPacket { public class WrapperPlayServerEntityEquipment extends AbstractPacket {
public static final PacketType TYPE = public static final PacketType TYPE =
PacketType.Play.Server.ENTITY_EQUIPMENT; PacketType.Play.Server.ENTITY_EQUIPMENT;
public WrapperPlayServerEntityEquipment() { public WrapperPlayServerEntityEquipment() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerEntityEquipment(PacketContainer packet) { public WrapperPlayServerEntityEquipment(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
/** /**
* Retrieve Entity ID. * Retrieve Entity ID.
* <p> * <p>
* Notes: entity's ID * Notes: entity's ID
* *
* @return The current Entity ID * @return The current Entity ID
*/ */
public int getEntityID() { public int getEntityID() {
return handle.getIntegers().read(0); return handle.getIntegers().read(0);
} }
/** /**
* Set Entity ID. * Set Entity ID.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setEntityID(int value) { public void setEntityID(int value) {
handle.getIntegers().write(0, value); handle.getIntegers().write(0, value);
} }
/** /**
* Retrieve the entity of the painting that will be spawned. * Retrieve the entity of the painting that will be spawned.
* *
* @param world - the current world of the entity. * @param world - the current world of the entity.
* @return The spawned entity. * @return The spawned entity.
*/ */
public Entity getEntity(World world) { public Entity getEntity(World world) {
return handle.getEntityModifier(world).read(0); return handle.getEntityModifier(world).read(0);
} }
/** /**
* Retrieve the entity of the painting that will be spawned. * Retrieve the entity of the painting that will be spawned.
* *
* @param event - the packet event. * @param event - the packet event.
* @return The spawned entity. * @return The spawned entity.
*/ */
public Entity getEntity(PacketEvent event) { public Entity getEntity(PacketEvent event) {
return getEntity(event.getPlayer().getWorld()); return getEntity(event.getPlayer().getWorld());
} }
public ItemSlot getSlot() { public ItemSlot getSlot() {
return handle.getItemSlots().read(0); return handle.getItemSlots().read(0);
} }
public void setSlot(ItemSlot value) { public void setSlot(ItemSlot value) {
handle.getItemSlots().write(0, value); handle.getItemSlots().write(0, value);
} }
/** /**
* Retrieve Item. * Retrieve Item.
* <p> * <p>
* Notes: item in slot format * Notes: item in slot format
* *
* @return The current Item * @return The current Item
*/ */
public ItemStack getItem() { public ItemStack getItem() {
return handle.getItemModifier().read(0); return handle.getItemModifier().read(0);
} }
/** /**
* Set Item. * Set Item.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setItem(ItemStack value) { public void setItem(ItemStack value) {
handle.getItemModifier().write(0, value); handle.getItemModifier().write(0, value);
} }
} }

View file

@ -2,132 +2,131 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package fr.leomelki.com.comphenix.packetwrapper; package fr.leomelki.com.comphenix.packetwrapper;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import com.comphenix.protocol.PacketType; import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent; import com.comphenix.protocol.events.PacketEvent;
import org.bukkit.World;
import org.bukkit.entity.Entity;
public class WrapperPlayServerEntityLook extends AbstractPacket { public class WrapperPlayServerEntityLook extends AbstractPacket {
public static final PacketType TYPE = PacketType.Play.Server.ENTITY_LOOK; public static final PacketType TYPE = PacketType.Play.Server.ENTITY_LOOK;
public WrapperPlayServerEntityLook() { public WrapperPlayServerEntityLook() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerEntityLook(PacketContainer packet) { public WrapperPlayServerEntityLook(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
/** /**
* Retrieve Entity ID. * Retrieve Entity ID.
* <p> * <p>
* Notes: entity's ID * Notes: entity's ID
* *
* @return The current Entity ID * @return The current Entity ID
*/ */
public int getEntityID() { public int getEntityID() {
return handle.getIntegers().read(0); return handle.getIntegers().read(0);
} }
/** /**
* Set Entity ID. * Set Entity ID.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setEntityID(int value) { public void setEntityID(int value) {
handle.getIntegers().write(0, value); handle.getIntegers().write(0, value);
} }
/** /**
* Retrieve the entity of the painting that will be spawned. * Retrieve the entity of the painting that will be spawned.
* *
* @param world - the current world of the entity. * @param world - the current world of the entity.
* @return The spawned entity. * @return The spawned entity.
*/ */
public Entity getEntity(World world) { public Entity getEntity(World world) {
return handle.getEntityModifier(world).read(0); return handle.getEntityModifier(world).read(0);
} }
/** /**
* Retrieve the entity of the painting that will be spawned. * Retrieve the entity of the painting that will be spawned.
* *
* @param event - the packet event. * @param event - the packet event.
* @return The spawned entity. * @return The spawned entity.
*/ */
public Entity getEntity(PacketEvent event) { public Entity getEntity(PacketEvent event) {
return getEntity(event.getPlayer().getWorld()); return getEntity(event.getPlayer().getWorld());
} }
/** /**
* Retrieve the yaw of the current entity. * Retrieve the yaw of the current entity.
* *
* @return The current Yaw * @return The current Yaw
*/ */
public float getYaw() { public float getYaw() {
return (handle.getBytes().read(0) * 360.F) / 256.0F; return (handle.getBytes().read(0) * 360.F) / 256.0F;
} }
/** /**
* Set the yaw of the current entity. * Set the yaw of the current entity.
* *
* @param value - new yaw. * @param value - new yaw.
*/ */
public void setYaw(float value) { public void setYaw(float value) {
handle.getBytes().write(0, (byte) (value * 256.0F / 360.0F)); handle.getBytes().write(0, (byte) (value * 256.0F / 360.0F));
} }
/** /**
* Retrieve the pitch of the current entity. * Retrieve the pitch of the current entity.
* *
* @return The current pitch * @return The current pitch
*/ */
public float getPitch() { public float getPitch() {
return (handle.getBytes().read(1) * 360.F) / 256.0F; return (handle.getBytes().read(1) * 360.F) / 256.0F;
} }
/** /**
* Set the pitch of the current entity. * Set the pitch of the current entity.
* *
* @param value - new pitch. * @param value - new pitch.
*/ */
public void setPitch(float value) { public void setPitch(float value) {
handle.getBytes().write(1, (byte) (value * 256.0F / 360.0F)); handle.getBytes().write(1, (byte) (value * 256.0F / 360.0F));
} }
/** /**
* Retrieve On Ground. * Retrieve On Ground.
* *
* @return The current On Ground * @return The current On Ground
*/ */
public boolean getOnGround() { public boolean getOnGround() {
return handle.getBooleans().read(0); return handle.getBooleans().read(0);
} }
/** /**
* Set On Ground. * Set On Ground.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setOnGround(boolean value) { public void setOnGround(boolean value) {
handle.getBooleans().write(0, value); handle.getBooleans().write(0, value);
} }
} }

View file

@ -2,100 +2,99 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package fr.leomelki.com.comphenix.packetwrapper; package fr.leomelki.com.comphenix.packetwrapper;
import java.util.List;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import com.comphenix.protocol.PacketType; import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent; import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.wrappers.WrappedWatchableObject; import com.comphenix.protocol.wrappers.WrappedWatchableObject;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import java.util.List;
public class WrapperPlayServerEntityMetadata extends AbstractPacket { public class WrapperPlayServerEntityMetadata extends AbstractPacket {
public static final PacketType TYPE = public static final PacketType TYPE =
PacketType.Play.Server.ENTITY_METADATA; PacketType.Play.Server.ENTITY_METADATA;
public WrapperPlayServerEntityMetadata() { public WrapperPlayServerEntityMetadata() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerEntityMetadata(PacketContainer packet) { public WrapperPlayServerEntityMetadata(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
/** /**
* Retrieve Entity ID. * Retrieve Entity ID.
* <p> * <p>
* Notes: entity's ID * Notes: entity's ID
* *
* @return The current Entity ID * @return The current Entity ID
*/ */
public int getEntityID() { public int getEntityID() {
return handle.getIntegers().read(0); return handle.getIntegers().read(0);
} }
/** /**
* Set Entity ID. * Set Entity ID.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setEntityID(int value) { public void setEntityID(int value) {
handle.getIntegers().write(0, value); handle.getIntegers().write(0, value);
} }
/** /**
* Retrieve the entity of the painting that will be spawned. * Retrieve the entity of the painting that will be spawned.
* *
* @param world - the current world of the entity. * @param world - the current world of the entity.
* @return The spawned entity. * @return The spawned entity.
*/ */
public Entity getEntity(World world) { public Entity getEntity(World world) {
return handle.getEntityModifier(world).read(0); return handle.getEntityModifier(world).read(0);
} }
/** /**
* Retrieve the entity of the painting that will be spawned. * Retrieve the entity of the painting that will be spawned.
* *
* @param event - the packet event. * @param event - the packet event.
* @return The spawned entity. * @return The spawned entity.
*/ */
public Entity getEntity(PacketEvent event) { public Entity getEntity(PacketEvent event) {
return getEntity(event.getPlayer().getWorld()); return getEntity(event.getPlayer().getWorld());
} }
/** /**
* Retrieve Metadata. * Retrieve Metadata.
* *
* @return The current Metadata * @return The current Metadata
*/ */
public List<WrappedWatchableObject> getMetadata() { public List<WrappedWatchableObject> getMetadata() {
return handle.getWatchableCollectionModifier().read(0); return handle.getWatchableCollectionModifier().read(0);
} }
/** /**
* Set Metadata. * Set Metadata.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setMetadata(List<WrappedWatchableObject> value) { public void setMetadata(List<WrappedWatchableObject> value) {
handle.getWatchableCollectionModifier().write(0, value); handle.getWatchableCollectionModifier().write(0, value);
} }
} }

View file

@ -2,145 +2,144 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package fr.leomelki.com.comphenix.packetwrapper; package fr.leomelki.com.comphenix.packetwrapper;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import com.comphenix.protocol.PacketType; import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent; import com.comphenix.protocol.events.PacketEvent;
import org.bukkit.World;
import org.bukkit.entity.Entity;
public class WrapperPlayServerEntityTeleport extends AbstractPacket { public class WrapperPlayServerEntityTeleport extends AbstractPacket {
public static final PacketType TYPE = public static final PacketType TYPE =
PacketType.Play.Server.ENTITY_TELEPORT; PacketType.Play.Server.ENTITY_TELEPORT;
public WrapperPlayServerEntityTeleport() { public WrapperPlayServerEntityTeleport() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerEntityTeleport(PacketContainer packet) { public WrapperPlayServerEntityTeleport(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
/** /**
* Retrieve entity ID. * Retrieve entity ID.
* *
* @return The current EID * @return The current EID
*/ */
public int getEntityID() { public int getEntityID() {
return handle.getIntegers().read(0); return handle.getIntegers().read(0);
} }
/** /**
* Set entity ID. * Set entity ID.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setEntityID(int value) { public void setEntityID(int value) {
handle.getIntegers().write(0, value); handle.getIntegers().write(0, value);
} }
/** /**
* Retrieve the entity. * Retrieve the entity.
* *
* @param world - the current world of the entity. * @param world - the current world of the entity.
* @return The entity. * @return The entity.
*/ */
public Entity getEntity(World world) { public Entity getEntity(World world) {
return handle.getEntityModifier(world).read(0); return handle.getEntityModifier(world).read(0);
} }
/** /**
* Retrieve the entity. * Retrieve the entity.
* *
* @param event - the packet event. * @param event - the packet event.
* @return The entity. * @return The entity.
*/ */
public Entity getEntity(PacketEvent event) { public Entity getEntity(PacketEvent event) {
return getEntity(event.getPlayer().getWorld()); return getEntity(event.getPlayer().getWorld());
} }
public double getX() { public double getX() {
return handle.getDoubles().read(0); return handle.getDoubles().read(0);
} }
public void setX(double value) { public void setX(double value) {
handle.getDoubles().write(0, value); handle.getDoubles().write(0, value);
} }
public double getY() { public double getY() {
return handle.getDoubles().read(1); return handle.getDoubles().read(1);
} }
public void setY(double value) { public void setY(double value) {
handle.getDoubles().write(1, value); handle.getDoubles().write(1, value);
} }
public double getZ() { public double getZ() {
return handle.getDoubles().read(2); return handle.getDoubles().read(2);
} }
public void setZ(double value) { public void setZ(double value) {
handle.getDoubles().write(2, value); handle.getDoubles().write(2, value);
} }
/** /**
* Retrieve the yaw of the current entity. * Retrieve the yaw of the current entity.
* *
* @return The current Yaw * @return The current Yaw
*/ */
public float getYaw() { public float getYaw() {
return (handle.getBytes().read(0) * 360.F) / 256.0F; return (handle.getBytes().read(0) * 360.F) / 256.0F;
} }
/** /**
* Set the yaw of the current entity. * Set the yaw of the current entity.
* *
* @param value - new yaw. * @param value - new yaw.
*/ */
public void setYaw(float value) { public void setYaw(float value) {
handle.getBytes().write(0, (byte) (value * 256.0F / 360.0F)); handle.getBytes().write(0, (byte) (value * 256.0F / 360.0F));
} }
/** /**
* Retrieve the pitch of the current entity. * Retrieve the pitch of the current entity.
* *
* @return The current pitch * @return The current pitch
*/ */
public float getPitch() { public float getPitch() {
return (handle.getBytes().read(1) * 360.F) / 256.0F; return (handle.getBytes().read(1) * 360.F) / 256.0F;
} }
/** /**
* Set the pitch of the current entity. * Set the pitch of the current entity.
* *
* @param value - new pitch. * @param value - new pitch.
*/ */
public void setPitch(float value) { public void setPitch(float value) {
handle.getBytes().write(1, (byte) (value * 256.0F / 360.0F)); handle.getBytes().write(1, (byte) (value * 256.0F / 360.0F));
} }
public boolean getOnGround() { public boolean getOnGround() {
return handle.getBooleans().read(0); return handle.getBooleans().read(0);
} }
public void setOnGround(boolean value) { public void setOnGround(boolean value) {
handle.getBooleans().write(0, value); handle.getBooleans().write(0, value);
} }
} }

View file

@ -2,17 +2,17 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
@ -22,71 +22,71 @@ import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
public class WrapperPlayServerExperience extends AbstractPacket { public class WrapperPlayServerExperience extends AbstractPacket {
public static final PacketType TYPE = PacketType.Play.Server.EXPERIENCE; public static final PacketType TYPE = PacketType.Play.Server.EXPERIENCE;
public WrapperPlayServerExperience() { public WrapperPlayServerExperience() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerExperience(PacketContainer packet) { public WrapperPlayServerExperience(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
/** /**
* Retrieve Experience bar. * Retrieve Experience bar.
* <p> * <p>
* Notes: between 0 and 1 * Notes: between 0 and 1
* *
* @return The current Experience bar * @return The current Experience bar
*/ */
public float getExperienceBar() { public float getExperienceBar() {
return handle.getFloat().read(0); return handle.getFloat().read(0);
} }
/** /**
* Set Experience bar. * Set Experience bar.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setExperienceBar(float value) { public void setExperienceBar(float value) {
handle.getFloat().write(0, value); handle.getFloat().write(0, value);
} }
/** /**
* Retrieve Level. * Retrieve Level.
* *
* @return The current Level * @return The current Level
*/ */
public int getLevel() { public int getLevel() {
return handle.getIntegers().read(1); return handle.getIntegers().read(1);
} }
/** /**
* Set Level. * Set Level.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setLevel(int value) { public void setLevel(int value) {
handle.getIntegers().write(1, value); handle.getIntegers().write(1, value);
} }
/** /**
* Retrieve Total Experience. * Retrieve Total Experience.
* *
* @return The current Total Experience * @return The current Total Experience
*/ */
public int getTotalExperience() { public int getTotalExperience() {
return handle.getIntegers().read(0); return handle.getIntegers().read(0);
} }
/** /**
* Set Total Experience. * Set Total Experience.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setTotalExperience(int value) { public void setTotalExperience(int value) {
handle.getIntegers().write(0, value); handle.getIntegers().write(0, value);
} }
} }

View file

@ -2,17 +2,17 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
@ -22,35 +22,35 @@ import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
public class WrapperPlayServerHeldItemSlot extends AbstractPacket { public class WrapperPlayServerHeldItemSlot extends AbstractPacket {
public static final PacketType TYPE = PacketType.Play.Server.HELD_ITEM_SLOT; public static final PacketType TYPE = PacketType.Play.Server.HELD_ITEM_SLOT;
public WrapperPlayServerHeldItemSlot() { public WrapperPlayServerHeldItemSlot() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerHeldItemSlot(PacketContainer packet) { public WrapperPlayServerHeldItemSlot(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
/** /**
* Retrieve Slot. * Retrieve Slot.
* <p> * <p>
* Notes: the slot which the player has selected (0-8) * Notes: the slot which the player has selected (0-8)
* *
* @return The current Slot * @return The current Slot
*/ */
public int getSlot() { public int getSlot() {
return handle.getIntegers().read(0); return handle.getIntegers().read(0);
} }
/** /**
* Set Slot. * Set Slot.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setSlot(int value) { public void setSlot(int value) {
handle.getIntegers().write(0, value); handle.getIntegers().write(0, value);
} }
} }

View file

@ -2,203 +2,202 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package fr.leomelki.com.comphenix.packetwrapper; package fr.leomelki.com.comphenix.packetwrapper;
import java.util.UUID;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import org.bukkit.util.Vector;
import com.comphenix.protocol.PacketType; import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent; import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.wrappers.WrappedDataWatcher; import com.comphenix.protocol.wrappers.WrappedDataWatcher;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import org.bukkit.util.Vector;
import java.util.UUID;
public class WrapperPlayServerNamedEntitySpawn extends AbstractPacket { public class WrapperPlayServerNamedEntitySpawn extends AbstractPacket {
public static final PacketType TYPE = public static final PacketType TYPE =
PacketType.Play.Server.NAMED_ENTITY_SPAWN; PacketType.Play.Server.NAMED_ENTITY_SPAWN;
public WrapperPlayServerNamedEntitySpawn() { public WrapperPlayServerNamedEntitySpawn() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerNamedEntitySpawn(PacketContainer packet) { public WrapperPlayServerNamedEntitySpawn(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
/** /**
* Retrieve Entity ID. * Retrieve Entity ID.
* <p> * <p>
* Notes: entity's ID * Notes: entity's ID
* *
* @return The current Entity ID * @return The current Entity ID
*/ */
public int getEntityID() { public int getEntityID() {
return handle.getIntegers().read(0); return handle.getIntegers().read(0);
} }
/** /**
* Set Entity ID. * Set Entity ID.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setEntityID(int value) { public void setEntityID(int value) {
handle.getIntegers().write(0, value); handle.getIntegers().write(0, value);
} }
/** /**
* Retrieve the entity of the painting that will be spawned. * Retrieve the entity of the painting that will be spawned.
* *
* @param world - the current world of the entity. * @param world - the current world of the entity.
* @return The spawned entity. * @return The spawned entity.
*/ */
public Entity getEntity(World world) { public Entity getEntity(World world) {
return handle.getEntityModifier(world).read(0); return handle.getEntityModifier(world).read(0);
} }
/** /**
* Retrieve the entity of the painting that will be spawned. * Retrieve the entity of the painting that will be spawned.
* *
* @param event - the packet event. * @param event - the packet event.
* @return The spawned entity. * @return The spawned entity.
*/ */
public Entity getEntity(PacketEvent event) { public Entity getEntity(PacketEvent event) {
return getEntity(event.getPlayer().getWorld()); return getEntity(event.getPlayer().getWorld());
} }
/** /**
* Retrieve Player UUID. * Retrieve Player UUID.
* <p> * <p>
* Notes: player's UUID * Notes: player's UUID
* *
* @return The current Player UUID * @return The current Player UUID
*/ */
public UUID getPlayerUUID() { public UUID getPlayerUUID() {
return handle.getUUIDs().read(0); return handle.getUUIDs().read(0);
} }
/** /**
* Set Player UUID. * Set Player UUID.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setPlayerUUID(UUID value) { public void setPlayerUUID(UUID value) {
handle.getUUIDs().write(0, value); handle.getUUIDs().write(0, value);
} }
/** /**
* Retrieve the position of the spawned entity as a vector. * Retrieve the position of the spawned entity as a vector.
* *
* @return The position as a vector. * @return The position as a vector.
*/ */
public Vector getPosition() { public Vector getPosition() {
return new Vector(getX(), getY(), getZ()); return new Vector(getX(), getY(), getZ());
} }
/** /**
* Set the position of the spawned entity using a vector. * Set the position of the spawned entity using a vector.
* *
* @param position - the new position. * @param position - the new position.
*/ */
public void setPosition(Vector position) { public void setPosition(Vector position) {
setX(position.getX()); setX(position.getX());
setY(position.getY()); setY(position.getY());
setZ(position.getZ()); setZ(position.getZ());
} }
public double getX() { public double getX() {
return handle.getDoubles().read(0); return handle.getDoubles().read(0);
} }
public void setX(double value) { public void setX(double value) {
handle.getDoubles().write(0, value); handle.getDoubles().write(0, value);
} }
public double getY() { public double getY() {
return handle.getDoubles().read(1); return handle.getDoubles().read(1);
} }
public void setY(double value) { public void setY(double value) {
handle.getDoubles().write(1, value); handle.getDoubles().write(1, value);
} }
public double getZ() { public double getZ() {
return handle.getDoubles().read(2); return handle.getDoubles().read(2);
} }
public void setZ(double value) { public void setZ(double value) {
handle.getDoubles().write(2, value); handle.getDoubles().write(2, value);
} }
/** /**
* Retrieve the yaw of the spawned entity. * Retrieve the yaw of the spawned entity.
* *
* @return The current Yaw * @return The current Yaw
*/ */
public float getYaw() { public float getYaw() {
return (handle.getBytes().read(0) * 360.F) / 256.0F; return (handle.getBytes().read(0) * 360.F) / 256.0F;
} }
/** /**
* Set the yaw of the spawned entity. * Set the yaw of the spawned entity.
* *
* @param value - new yaw. * @param value - new yaw.
*/ */
public void setYaw(float value) { public void setYaw(float value) {
handle.getBytes().write(0, (byte) (value * 256.0F / 360.0F)); handle.getBytes().write(0, (byte) (value * 256.0F / 360.0F));
} }
/** /**
* Retrieve the pitch of the spawned entity. * Retrieve the pitch of the spawned entity.
* *
* @return The current pitch * @return The current pitch
*/ */
public float getPitch() { public float getPitch() {
return (handle.getBytes().read(1) * 360.F) / 256.0F; return (handle.getBytes().read(1) * 360.F) / 256.0F;
} }
/** /**
* Set the pitch of the spawned entity. * Set the pitch of the spawned entity.
* *
* @param value - new pitch. * @param value - new pitch.
*/ */
public void setPitch(float value) { public void setPitch(float value) {
handle.getBytes().write(1, (byte) (value * 256.0F / 360.0F)); handle.getBytes().write(1, (byte) (value * 256.0F / 360.0F));
} }
/** /**
* Retrieve Metadata. * Retrieve Metadata.
* <p> * <p>
* Notes: the client will crash if no metadata is sent * Notes: the client will crash if no metadata is sent
* *
* @return The current Metadata * @return The current Metadata
*/ */
public WrappedDataWatcher getMetadata() { public WrappedDataWatcher getMetadata() {
return handle.getDataWatcherModifier().read(0); return handle.getDataWatcherModifier().read(0);
} }
/** /**
* Set Metadata. * Set Metadata.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setMetadata(WrappedDataWatcher value) { public void setMetadata(WrappedDataWatcher value) {
handle.getDataWatcherModifier().write(0, value); handle.getDataWatcherModifier().write(0, value);
} }
} }

View file

@ -2,155 +2,154 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package fr.leomelki.com.comphenix.packetwrapper; package fr.leomelki.com.comphenix.packetwrapper;
import org.bukkit.Sound;
import com.comphenix.protocol.PacketType; import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.wrappers.EnumWrappers.SoundCategory; import com.comphenix.protocol.wrappers.EnumWrappers.SoundCategory;
import org.bukkit.Sound;
public class WrapperPlayServerNamedSoundEffect extends AbstractPacket { public class WrapperPlayServerNamedSoundEffect extends AbstractPacket {
public static final PacketType TYPE = public static final PacketType TYPE =
PacketType.Play.Server.NAMED_SOUND_EFFECT; PacketType.Play.Server.NAMED_SOUND_EFFECT;
public WrapperPlayServerNamedSoundEffect() { public WrapperPlayServerNamedSoundEffect() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerNamedSoundEffect(PacketContainer packet) { public WrapperPlayServerNamedSoundEffect(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
public Sound getSoundEffect() { public Sound getSoundEffect() {
return handle.getSoundEffects().read(0); return handle.getSoundEffects().read(0);
} }
public void setSoundEffect(Sound value) { public void setSoundEffect(Sound value) {
handle.getSoundEffects().write(0, value); handle.getSoundEffects().write(0, value);
} }
public SoundCategory getSoundCategory() { public SoundCategory getSoundCategory() {
return handle.getSoundCategories().read(0); return handle.getSoundCategories().read(0);
} }
public void setSoundCategory(SoundCategory value) { public void setSoundCategory(SoundCategory value) {
handle.getSoundCategories().write(0, value); handle.getSoundCategories().write(0, value);
} }
/** /**
* Retrieve Effect position X. * Retrieve Effect position X.
* <p> * <p>
* Notes: effect X multiplied by 8 * Notes: effect X multiplied by 8
* *
* @return The current Effect position X * @return The current Effect position X
*/ */
public int getEffectPositionX() { public int getEffectPositionX() {
return handle.getIntegers().read(0); return handle.getIntegers().read(0);
} }
/** /**
* Set Effect position X. * Set Effect position X.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setEffectPositionX(int value) { public void setEffectPositionX(int value) {
handle.getIntegers().write(0, value); handle.getIntegers().write(0, value);
} }
/** /**
* Retrieve Effect position Y. * Retrieve Effect position Y.
* <p> * <p>
* Notes: effect Y multiplied by 8 * Notes: effect Y multiplied by 8
* *
* @return The current Effect position Y * @return The current Effect position Y
*/ */
public int getEffectPositionY() { public int getEffectPositionY() {
return handle.getIntegers().read(1); return handle.getIntegers().read(1);
} }
/** /**
* Set Effect position Y. * Set Effect position Y.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setEffectPositionY(int value) { public void setEffectPositionY(int value) {
handle.getIntegers().write(1, value); handle.getIntegers().write(1, value);
} }
/** /**
* Retrieve Effect position Z. * Retrieve Effect position Z.
* <p> * <p>
* Notes: effect Z multiplied by 8 * Notes: effect Z multiplied by 8
* *
* @return The current Effect position Z * @return The current Effect position Z
*/ */
public int getEffectPositionZ() { public int getEffectPositionZ() {
return handle.getIntegers().read(2); return handle.getIntegers().read(2);
} }
/** /**
* Set Effect position Z. * Set Effect position Z.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setEffectPositionZ(int value) { public void setEffectPositionZ(int value) {
handle.getIntegers().write(2, value); handle.getIntegers().write(2, value);
} }
/** /**
* Retrieve Volume. * Retrieve Volume.
* <p> * <p>
* Notes: 1 is 100%, can be more * Notes: 1 is 100%, can be more
* *
* @return The current Volume * @return The current Volume
*/ */
public float getVolume() { public float getVolume() {
return handle.getFloat().read(0); return handle.getFloat().read(0);
} }
/** /**
* Set Volume. * Set Volume.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setVolume(float value) { public void setVolume(float value) {
handle.getFloat().write(0, value); handle.getFloat().write(0, value);
} }
/** /**
* Retrieve Pitch. * Retrieve Pitch.
* <p> * <p>
* Notes: 63 is 100%, can be more * Notes: 63 is 100%, can be more
* *
* @return The current Pitch * @return The current Pitch
*/ */
public float getPitch() { public float getPitch() {
return handle.getFloat().read(1); return handle.getFloat().read(1);
} }
/** /**
* Set Pitch. * Set Pitch.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setPitch(float value) { public void setPitch(float value) {
handle.getFloat().write(1, value); handle.getFloat().write(1, value);
} }
} }

View file

@ -2,54 +2,54 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package fr.leomelki.com.comphenix.packetwrapper; package fr.leomelki.com.comphenix.packetwrapper;
import java.util.List;
import com.comphenix.protocol.PacketType; import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.wrappers.EnumWrappers.PlayerInfoAction; import com.comphenix.protocol.wrappers.EnumWrappers.PlayerInfoAction;
import com.comphenix.protocol.wrappers.PlayerInfoData; import com.comphenix.protocol.wrappers.PlayerInfoData;
import java.util.List;
public class WrapperPlayServerPlayerInfo extends AbstractPacket { public class WrapperPlayServerPlayerInfo extends AbstractPacket {
public static final PacketType TYPE = PacketType.Play.Server.PLAYER_INFO; public static final PacketType TYPE = PacketType.Play.Server.PLAYER_INFO;
public WrapperPlayServerPlayerInfo() { public WrapperPlayServerPlayerInfo() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerPlayerInfo(PacketContainer packet) { public WrapperPlayServerPlayerInfo(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
public PlayerInfoAction getAction() { public PlayerInfoAction getAction() {
return handle.getPlayerInfoAction().read(0); return handle.getPlayerInfoAction().read(0);
} }
public void setAction(PlayerInfoAction value) { public void setAction(PlayerInfoAction value) {
handle.getPlayerInfoAction().write(0, value); handle.getPlayerInfoAction().write(0, value);
} }
public List<PlayerInfoData> getData() { public List<PlayerInfoData> getData() {
return handle.getPlayerInfoDataLists().read(0); return handle.getPlayerInfoDataLists().read(0);
} }
public void setData(List<PlayerInfoData> value) { public void setData(List<PlayerInfoData> value) {
handle.getPlayerInfoDataLists().write(0, value); handle.getPlayerInfoDataLists().write(0, value);
} }
} }

View file

@ -2,160 +2,159 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package fr.leomelki.com.comphenix.packetwrapper; package fr.leomelki.com.comphenix.packetwrapper;
import java.util.Set;
import com.comphenix.protocol.PacketType; import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.reflect.StructureModifier; import com.comphenix.protocol.reflect.StructureModifier;
import com.comphenix.protocol.utility.MinecraftReflection; import com.comphenix.protocol.utility.MinecraftReflection;
import com.comphenix.protocol.wrappers.EnumWrappers; import com.comphenix.protocol.wrappers.EnumWrappers;
import java.util.Set;
public class WrapperPlayServerPosition extends AbstractPacket { public class WrapperPlayServerPosition extends AbstractPacket {
public static final PacketType TYPE = PacketType.Play.Server.POSITION; public static final PacketType TYPE = PacketType.Play.Server.POSITION;
private static final Class<?> FLAGS_CLASS = MinecraftReflection
.getMinecraftClass("EnumPlayerTeleportFlags",
"PacketPlayOutPosition$EnumPlayerTeleportFlags");
public WrapperPlayServerPosition() { public WrapperPlayServerPosition() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerPosition(PacketContainer packet) { public WrapperPlayServerPosition(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
/** /**
* Retrieve X. * Retrieve X.
* <p> * <p>
* Notes: absolute/Relative position * Notes: absolute/Relative position
* *
* @return The current X * @return The current X
*/ */
public double getX() { public double getX() {
return handle.getDoubles().read(0); return handle.getDoubles().read(0);
} }
/** /**
* Set X. * Set X.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setX(double value) { public void setX(double value) {
handle.getDoubles().write(0, value); handle.getDoubles().write(0, value);
} }
/** /**
* Retrieve Y. * Retrieve Y.
* <p> * <p>
* Notes: absolute/Relative position * Notes: absolute/Relative position
* *
* @return The current Y * @return The current Y
*/ */
public double getY() { public double getY() {
return handle.getDoubles().read(1); return handle.getDoubles().read(1);
} }
/** /**
* Set Y. * Set Y.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setY(double value) { public void setY(double value) {
handle.getDoubles().write(1, value); handle.getDoubles().write(1, value);
} }
/** /**
* Retrieve Z. * Retrieve Z.
* <p> * <p>
* Notes: absolute/Relative position * Notes: absolute/Relative position
* *
* @return The current Z * @return The current Z
*/ */
public double getZ() { public double getZ() {
return handle.getDoubles().read(2); return handle.getDoubles().read(2);
} }
/** /**
* Set Z. * Set Z.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setZ(double value) { public void setZ(double value) {
handle.getDoubles().write(2, value); handle.getDoubles().write(2, value);
} }
/** /**
* Retrieve Yaw. * Retrieve Yaw.
* <p> * <p>
* Notes: absolute/Relative rotation on the X Axis, in degrees * Notes: absolute/Relative rotation on the X Axis, in degrees
* *
* @return The current Yaw * @return The current Yaw
*/ */
public float getYaw() { public float getYaw() {
return handle.getFloat().read(0); return handle.getFloat().read(0);
} }
/** /**
* Set Yaw. * Set Yaw.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setYaw(float value) { public void setYaw(float value) {
handle.getFloat().write(0, value); handle.getFloat().write(0, value);
} }
/** /**
* Retrieve Pitch. * Retrieve Pitch.
* <p> * <p>
* Notes: absolute/Relative rotation on the Y Axis, in degrees * Notes: absolute/Relative rotation on the Y Axis, in degrees
* *
* @return The current Pitch * @return The current Pitch
*/ */
public float getPitch() { public float getPitch() {
return handle.getFloat().read(1); return handle.getFloat().read(1);
} }
/** /**
* Set Pitch. * Set Pitch.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setPitch(float value) { public void setPitch(float value) {
handle.getFloat().write(1, value); handle.getFloat().write(1, value);
} }
private static final Class<?> FLAGS_CLASS = MinecraftReflection private StructureModifier<Set<PlayerTeleportFlag>> getFlagsModifier() {
.getMinecraftClass("EnumPlayerTeleportFlags", return handle.getSets(
"PacketPlayOutPosition$EnumPlayerTeleportFlags"); EnumWrappers.getGenericConverter(FLAGS_CLASS, PlayerTeleportFlag.class));
}
public enum PlayerTeleportFlag { public Set<PlayerTeleportFlag> getFlags() {
X, Y, Z, Y_ROT, X_ROT return getFlagsModifier().read(0);
} }
private StructureModifier<Set<PlayerTeleportFlag>> getFlagsModifier() { public void setFlags(Set<PlayerTeleportFlag> value) {
return handle.getSets( getFlagsModifier().write(0, value);
EnumWrappers.getGenericConverter(FLAGS_CLASS, PlayerTeleportFlag.class)); }
}
public Set<PlayerTeleportFlag> getFlags() { public enum PlayerTeleportFlag {
return getFlagsModifier().read(0); X, Y, Z, Y_ROT, X_ROT
} }
public void setFlags(Set<PlayerTeleportFlag> value) {
getFlagsModifier().write(0, value);
}
} }

View file

@ -2,120 +2,119 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package fr.leomelki.com.comphenix.packetwrapper; package fr.leomelki.com.comphenix.packetwrapper;
import org.bukkit.WorldType;
import com.comphenix.protocol.PacketType; import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.wrappers.EnumWrappers.Difficulty; import com.comphenix.protocol.wrappers.EnumWrappers.Difficulty;
import com.comphenix.protocol.wrappers.EnumWrappers.NativeGameMode; import com.comphenix.protocol.wrappers.EnumWrappers.NativeGameMode;
import org.bukkit.WorldType;
public class WrapperPlayServerRespawn extends AbstractPacket { public class WrapperPlayServerRespawn extends AbstractPacket {
public static final PacketType TYPE = PacketType.Play.Server.RESPAWN; public static final PacketType TYPE = PacketType.Play.Server.RESPAWN;
public WrapperPlayServerRespawn() { public WrapperPlayServerRespawn() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerRespawn(PacketContainer packet) { public WrapperPlayServerRespawn(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
/** /**
* Retrieve Dimension. * Retrieve Dimension.
* <p> * <p>
* Notes: -1: The Nether, 0: The Overworld, 1: The End * Notes: -1: The Nether, 0: The Overworld, 1: The End
* *
* @return The current Dimension * @return The current Dimension
*/ */
public int getDimension() { public int getDimension() {
return handle.getIntegers().read(0); return handle.getIntegers().read(0);
} }
/** /**
* Set Dimension. * Set Dimension.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setDimension(int value) { public void setDimension(int value) {
handle.getIntegers().write(0, value); handle.getIntegers().write(0, value);
} }
/** /**
* Retrieve Difficulty. * Retrieve Difficulty.
* <p> * <p>
* Notes: 0 thru 3 for Peaceful, Easy, Normal, Hard. * Notes: 0 thru 3 for Peaceful, Easy, Normal, Hard.
* *
* @return The current Difficulty * @return The current Difficulty
*/ */
public Difficulty getDifficulty() { public Difficulty getDifficulty() {
return handle.getDifficulties().read(0); return handle.getDifficulties().read(0);
} }
/** /**
* Set Difficulty. * Set Difficulty.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setDifficulty(Difficulty value) { public void setDifficulty(Difficulty value) {
handle.getDifficulties().write(0, value); handle.getDifficulties().write(0, value);
} }
/** /**
* Retrieve Gamemode. * Retrieve Gamemode.
* <p> * <p>
* Notes: 0: survival, 1: creative, 2: adventure. The hardcore flag is not * Notes: 0: survival, 1: creative, 2: adventure. The hardcore flag is not
* included * included
* *
* @return The current Gamemode * @return The current Gamemode
*/ */
public NativeGameMode getGamemode() { public NativeGameMode getGamemode() {
return handle.getGameModes().read(0); return handle.getGameModes().read(0);
} }
/** /**
* Set Gamemode. * Set Gamemode.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setGamemode(NativeGameMode value) { public void setGamemode(NativeGameMode value) {
handle.getGameModes().write(0, value); handle.getGameModes().write(0, value);
} }
/** /**
* Retrieve Level Type. * Retrieve Level Type.
* <p> * <p>
* Notes: same as Join Game * Notes: same as Join Game
* *
* @return The current Level Type * @return The current Level Type
*/ */
public WorldType getLevelType() { public WorldType getLevelType() {
return handle.getWorldTypeModifier().read(0); return handle.getWorldTypeModifier().read(0);
} }
/** /**
* Set Level Type. * Set Level Type.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setLevelType(WorldType value) { public void setLevelType(WorldType value) {
handle.getWorldTypeModifier().write(0, value); handle.getWorldTypeModifier().write(0, value);
} }
} }

View file

@ -2,17 +2,17 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
@ -22,57 +22,57 @@ import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
public class WrapperPlayServerScoreboardDisplayObjective extends AbstractPacket { public class WrapperPlayServerScoreboardDisplayObjective extends AbstractPacket {
public static final PacketType TYPE = public static final PacketType TYPE =
PacketType.Play.Server.SCOREBOARD_DISPLAY_OBJECTIVE; PacketType.Play.Server.SCOREBOARD_DISPLAY_OBJECTIVE;
public WrapperPlayServerScoreboardDisplayObjective() { public WrapperPlayServerScoreboardDisplayObjective() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerScoreboardDisplayObjective(PacketContainer packet) { public WrapperPlayServerScoreboardDisplayObjective(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
/** /**
* Retrieve Position. * Retrieve Position.
* <p> * <p>
* Notes: the position of the scoreboard. 0 = list, 1 = sidebar, 2 = * Notes: the position of the scoreboard. 0 = list, 1 = sidebar, 2 =
* belowName. * belowName.
* *
* @return The current Position * @return The current Position
*/ */
public int getPosition() { public int getPosition() {
return handle.getIntegers().read(0); return handle.getIntegers().read(0);
} }
/** /**
* Set Position. * Set Position.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setPosition(int value) { public void setPosition(int value) {
handle.getIntegers().write(0, value); handle.getIntegers().write(0, value);
} }
/** /**
* Retrieve Score Name. * Retrieve Score Name.
* <p> * <p>
* Notes: the unique name for the scoreboard to be displayed. * Notes: the unique name for the scoreboard to be displayed.
* *
* @return The current Score Name * @return The current Score Name
*/ */
public String getScoreName() { public String getScoreName() {
return handle.getStrings().read(0); return handle.getStrings().read(0);
} }
/** /**
* Set Score Name. * Set Score Name.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setScoreName(String value) { public void setScoreName(String value) {
handle.getStrings().write(0, value); handle.getStrings().write(0, value);
} }
} }

View file

@ -2,17 +2,17 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
@ -24,118 +24,118 @@ import com.comphenix.protocol.reflect.IntEnum;
import com.comphenix.protocol.wrappers.WrappedChatComponent; import com.comphenix.protocol.wrappers.WrappedChatComponent;
public class WrapperPlayServerScoreboardObjective extends AbstractPacket { public class WrapperPlayServerScoreboardObjective extends AbstractPacket {
public static final PacketType TYPE = public static final PacketType TYPE =
PacketType.Play.Server.SCOREBOARD_OBJECTIVE; PacketType.Play.Server.SCOREBOARD_OBJECTIVE;
public WrapperPlayServerScoreboardObjective() { public WrapperPlayServerScoreboardObjective() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerScoreboardObjective(PacketContainer packet) { public WrapperPlayServerScoreboardObjective(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
/** /**
* Enum containing all known packet modes. * Retrieve Objective name.
* * <p>
* @author dmulloy2 * Notes: an unique name for the objective
*/ *
public static class Mode extends IntEnum { * @return The current Objective name
public static final int ADD_OBJECTIVE = 0; */
public static final int REMOVE_OBJECTIVE = 1; public String getName() {
public static final int UPDATE_VALUE = 2; return handle.getStrings().read(0);
}
private static final Mode INSTANCE = new Mode(); /**
* Set Objective name.
*
* @param value - new value.
*/
public void setName(String value) {
handle.getStrings().write(0, value);
}
public static Mode getInstance() { /**
return INSTANCE; * Retrieve Objective DisplayName.
} * <p>
} * Notes: only if mode is 0 or 2. The text to be displayed for the score.
*
* @return The current Objective value
*/
public WrappedChatComponent getDisplayName() {
return handle.getChatComponents().read(0);
}
/** /**
* Retrieve Objective name. * Set Objective DisplayName.
* <p> *
* Notes: an unique name for the objective * @param value - new value.
* */
* @return The current Objective name public void setDisplayName(WrappedChatComponent value) {
*/ handle.getChatComponents().write(0, value);
public String getName() { }
return handle.getStrings().read(0);
}
/** /**
* Set Objective name. * Retrieve health display.
* * <p>
* @param value - new value. * Notes: Can be either INTEGER or HEARTS
*/ *
public void setName(String value) { * @return the current health display value
handle.getStrings().write(0, value); */
} public HealthDisplay getHealthDisplay() {
return handle.getEnumModifier(HealthDisplay.class, 2).read(0);
}
/** /**
* Retrieve Objective DisplayName. * Set health display.
* <p> *
* Notes: only if mode is 0 or 2. The text to be displayed for the score. * @param value - value
* * @see #getHealthDisplay()
* @return The current Objective value */
*/ public void setHealthDisplay(HealthDisplay value) {
public WrappedChatComponent getDisplayName() { handle.getEnumModifier(HealthDisplay.class, 2).write(0, value);
return handle.getChatComponents().read(0); }
}
/** /**
* Set Objective DisplayName. * Retrieve Mode.
* * <p>
* @param value - new value. * Notes: 0 to create the scoreboard. 1 to remove the scoreboard. 2 to
*/ * update the display text.
public void setDisplayName(WrappedChatComponent value) { *
handle.getChatComponents().write(0, value); * @return The current Mode
} */
public int getMode() {
return handle.getIntegers().read(0);
}
/** /**
* Retrieve health display. * Set Mode.
* <p> *
* Notes: Can be either INTEGER or HEARTS * @param value - new value.
* */
* @return the current health display value public void setMode(int value) {
*/ handle.getIntegers().write(0, value);
public HealthDisplay getHealthDisplay() { }
return handle.getEnumModifier(HealthDisplay.class, 2).read(0);
}
/** public enum HealthDisplay {
* Set health display. INTEGER, HEARTS
* }
* @param value - value
* @see #getHealthDisplay()
*/
public void setHealthDisplay(HealthDisplay value) {
handle.getEnumModifier(HealthDisplay.class, 2).write(0, value);
}
/** /**
* Retrieve Mode. * Enum containing all known packet modes.
* <p> *
* Notes: 0 to create the scoreboard. 1 to remove the scoreboard. 2 to * @author dmulloy2
* update the display text. */
* public static class Mode extends IntEnum {
* @return The current Mode public static final int ADD_OBJECTIVE = 0;
*/ public static final int REMOVE_OBJECTIVE = 1;
public int getMode() { public static final int UPDATE_VALUE = 2;
return handle.getIntegers().read(0);
}
/** private static final Mode INSTANCE = new Mode();
* Set Mode.
*
* @param value - new value.
*/
public void setMode(int value) {
handle.getIntegers().write(0, value);
}
public enum HealthDisplay { public static Mode getInstance() {
INTEGER, HEARTS return INSTANCE;
} }
}
} }

View file

@ -2,17 +2,17 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
@ -23,85 +23,85 @@ import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.wrappers.EnumWrappers.ScoreboardAction; import com.comphenix.protocol.wrappers.EnumWrappers.ScoreboardAction;
public class WrapperPlayServerScoreboardScore extends AbstractPacket { public class WrapperPlayServerScoreboardScore extends AbstractPacket {
public static final PacketType TYPE = public static final PacketType TYPE =
PacketType.Play.Server.SCOREBOARD_SCORE; PacketType.Play.Server.SCOREBOARD_SCORE;
public WrapperPlayServerScoreboardScore() { public WrapperPlayServerScoreboardScore() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerScoreboardScore(PacketContainer packet) { public WrapperPlayServerScoreboardScore(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
/** /**
* Retrieve Score name. * Retrieve Score name.
* <p> * <p>
* Notes: the name of the score to be updated or removed. * Notes: the name of the score to be updated or removed.
* *
* @return The current Score name * @return The current Score name
*/ */
public String getScoreName() { public String getScoreName() {
return handle.getStrings().read(0); return handle.getStrings().read(0);
} }
/** /**
* Set Score name. * Set Score name.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setScoreName(String value) { public void setScoreName(String value) {
handle.getStrings().write(0, value); handle.getStrings().write(0, value);
} }
/** /**
* Retrieve Objective Name. * Retrieve Objective Name.
* <p> * <p>
* Notes: the name of the objective the score belongs to. * Notes: the name of the objective the score belongs to.
* *
* @return The current Objective Name * @return The current Objective Name
*/ */
public String getObjectiveName() { public String getObjectiveName() {
return handle.getStrings().read(1); return handle.getStrings().read(1);
} }
/** /**
* Set Objective Name. * Set Objective Name.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setObjectiveName(String value) { public void setObjectiveName(String value) {
handle.getStrings().write(1, value); handle.getStrings().write(1, value);
} }
/** /**
* Retrieve Value. * Retrieve Value.
* <p> * <p>
* Notes: the score to be displayed next to the entry. Only sent when * Notes: the score to be displayed next to the entry. Only sent when
* Update/Remove does not equal 1. * Update/Remove does not equal 1.
* *
* @return The current Value * @return The current Value
*/ */
public int getValue() { public int getValue() {
return handle.getIntegers().read(0); return handle.getIntegers().read(0);
} }
/** /**
* Set Value. * Set Value.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setValue(int value) { public void setValue(int value) {
handle.getIntegers().write(0, value); handle.getIntegers().write(0, value);
} }
public ScoreboardAction getAction() { public ScoreboardAction getAction() {
return handle.getScoreboardActions().read(0); return handle.getScoreboardActions().read(0);
} }
public void setScoreboardAction(ScoreboardAction value) { public void setScoreboardAction(ScoreboardAction value) {
handle.getScoreboardActions().write(0, value); handle.getScoreboardActions().write(0, value);
} }
} }

View file

@ -2,278 +2,277 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package fr.leomelki.com.comphenix.packetwrapper; package fr.leomelki.com.comphenix.packetwrapper;
import java.util.Collection;
import java.util.List;
import com.comphenix.protocol.PacketType; import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.reflect.IntEnum; import com.comphenix.protocol.reflect.IntEnum;
import com.comphenix.protocol.utility.MinecraftReflection; import com.comphenix.protocol.utility.MinecraftReflection;
import com.comphenix.protocol.wrappers.WrappedChatComponent; import com.comphenix.protocol.wrappers.WrappedChatComponent;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import java.util.Collection;
import java.util.List;
public class WrapperPlayServerScoreboardTeam extends AbstractPacket { public class WrapperPlayServerScoreboardTeam extends AbstractPacket {
public static final PacketType TYPE = public static final PacketType TYPE =
PacketType.Play.Server.SCOREBOARD_TEAM; PacketType.Play.Server.SCOREBOARD_TEAM;
public WrapperPlayServerScoreboardTeam() { public WrapperPlayServerScoreboardTeam() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerScoreboardTeam(PacketContainer packet) { public WrapperPlayServerScoreboardTeam(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
/** /**
* Enum containing all known modes. * Retrieve Team Name.
* * <p>
* @author dmulloy2 * Notes: a unique name for the team. (Shared with scoreboard).
*/ *
public static class Mode extends IntEnum { * @return The current Team Name
public static final int TEAM_CREATED = 0; */
public static final int TEAM_REMOVED = 1; public String getName() {
public static final int TEAM_UPDATED = 2; return handle.getStrings().read(0);
public static final int PLAYERS_ADDED = 3; }
public static final int PLAYERS_REMOVED = 4;
private static final Mode INSTANCE = new Mode(); /**
* Set Team Name.
*
* @param value - new value.
*/
public void setName(String value) {
handle.getStrings().write(0, value);
}
public static Mode getInstance() { /**
return INSTANCE; * Retrieve Team Display Name.
} * <p>
} * Notes: only if Mode = 0 or 2.
*
* @return The current Team Display Name
*/
public WrappedChatComponent getDisplayName() {
return handle.getChatComponents().read(0);
}
/** /**
* Retrieve Team Name. * Set Team Display Name.
* <p> *
* Notes: a unique name for the team. (Shared with scoreboard). * @param value - new value.
* */
* @return The current Team Name public void setDisplayName(WrappedChatComponent value) {
*/ handle.getChatComponents().write(0, value);
public String getName() { }
return handle.getStrings().read(0);
}
/** /**
* Set Team Name. * Retrieve Team Prefix.
* * <p>
* @param value - new value. * Notes: only if Mode = 0 or 2. Displayed before the players' name that are
*/ * part of this team.
public void setName(String value) { *
handle.getStrings().write(0, value); * @return The current Team Prefix
} */
public WrappedChatComponent getPrefix() {
return handle.getChatComponents().read(1);
}
/** /**
* Retrieve Team Display Name. * Set Team Prefix.
* <p> *
* Notes: only if Mode = 0 or 2. * @param value - new value.
* */
* @return The current Team Display Name public void setPrefix(WrappedChatComponent value) {
*/ handle.getChatComponents().write(1, value);
public WrappedChatComponent getDisplayName() { }
return handle.getChatComponents().read(0);
}
/** /**
* Set Team Display Name. * Retrieve Team Suffix.
* * <p>
* @param value - new value. * Notes: only if Mode = 0 or 2. Displayed after the players' name that are
*/ * part of this team.
public void setDisplayName(WrappedChatComponent value) { *
handle.getChatComponents().write(0, value); * @return The current Team Suffix
} */
public WrappedChatComponent getSuffix() {
return handle.getChatComponents().read(2);
}
/** /**
* Retrieve Team Prefix. * Set Team Suffix.
* <p> *
* Notes: only if Mode = 0 or 2. Displayed before the players' name that are * @param value - new value.
* part of this team. */
* public void setSuffix(WrappedChatComponent value) {
* @return The current Team Prefix handle.getChatComponents().write(2, value);
*/ }
public WrappedChatComponent getPrefix() {
return handle.getChatComponents().read(1);
}
/** /**
* Set Team Prefix. * Retrieve Name Tag Visibility.
* * <p>
* @param value - new value. * Notes: only if Mode = 0 or 2. always, hideForOtherTeams, hideForOwnTeam,
*/ * never.
public void setPrefix(WrappedChatComponent value) { *
handle.getChatComponents().write(1, value); * @return The current Name Tag Visibility
} */
public String getNameTagVisibility() {
return handle.getStrings().read(1);
}
/** /**
* Retrieve Team Suffix. * Set Name Tag Visibility.
* <p> *
* Notes: only if Mode = 0 or 2. Displayed after the players' name that are * @param value - new value.
* part of this team. */
* public void setNameTagVisibility(String value) {
* @return The current Team Suffix handle.getStrings().write(1, value);
*/ }
public WrappedChatComponent getSuffix() {
return handle.getChatComponents().read(2);
}
/** /**
* Set Team Suffix. * Retrieve Color.
* * <p>
* @param value - new value. * Notes: only if Mode = 0 or 2. Same as Chat colors.
*/ *
public void setSuffix(WrappedChatComponent value) { * @return The current Color
handle.getChatComponents().write(2, value); */
} public ChatColor getColor() {
return handle.getEnumModifier(ChatColor.class, MinecraftReflection.getMinecraftClass("EnumChatFormat")).read(0);
}
/** /**
* Retrieve Name Tag Visibility. * Set Color.
* <p> *
* Notes: only if Mode = 0 or 2. always, hideForOtherTeams, hideForOwnTeam, * @param value - new value.
* never. */
* public void setColor(ChatColor value) {
* @return The current Name Tag Visibility handle.getEnumModifier(ChatColor.class, MinecraftReflection.getMinecraftClass("EnumChatFormat")).write(0, value);
*/ }
public String getNameTagVisibility() {
return handle.getStrings().read(1);
}
/** /**
* Set Name Tag Visibility. * Get the collision rule.
* * Notes: only if Mode = 0 or 2. always, pushOtherTeams, pushOwnTeam, never.
* @param value - new value. * @return The current collision rule
*/ */
public void setNameTagVisibility(String value) { public String getCollisionRule() {
handle.getStrings().write(1, value); return handle.getStrings().read(2);
} }
/** /**
* Retrieve Color. * Sets the collision rule.
* <p> * @param value - new value.
* Notes: only if Mode = 0 or 2. Same as Chat colors. */
* public void setCollisionRule(String value) {
* @return The current Color handle.getStrings().write(2, value);
*/ }
public ChatColor getColor() {
return handle.getEnumModifier(ChatColor.class, MinecraftReflection.getMinecraftClass("EnumChatFormat")).read(0);
}
/** /**
* Set Color. * Retrieve Players.
* * <p>
* @param value - new value. * Notes: only if Mode = 0 or 3 or 4. Players to be added/remove from the
*/ * team. Max 40 characters so may be uuid's later
public void setColor(ChatColor value) { *
handle.getEnumModifier(ChatColor.class, MinecraftReflection.getMinecraftClass("EnumChatFormat")).write(0, value); * @return The current Players
} */
@SuppressWarnings("unchecked")
public List<String> getPlayers() {
return (List<String>) handle.getSpecificModifier(Collection.class)
.read(0);
}
/** /**
* Get the collision rule. * Set Players.
* Notes: only if Mode = 0 or 2. always, pushOtherTeams, pushOwnTeam, never. *
* @return The current collision rule * @param value - new value.
*/ */
public String getCollisionRule() { public void setPlayers(List<String> value) {
return handle.getStrings().read(2); handle.getSpecificModifier(Collection.class).write(0, value);
} }
/** /**
* Sets the collision rule. * Retrieve Mode.
* @param value - new value. * <p>
*/ * Notes: if 0 then the team is created. If 1 then the team is removed. If 2
public void setCollisionRule(String value) { * the team team information is updated. If 3 then new players are added to
handle.getStrings().write(2, value); * the team. If 4 then players are removed from the team.
} *
* @return The current Mode
*/
public int getMode() {
return handle.getIntegers().read(0);
}
/** /**
* Retrieve Players. * Set Mode.
* <p> *
* Notes: only if Mode = 0 or 3 or 4. Players to be added/remove from the * @param value - new value.
* team. Max 40 characters so may be uuid's later */
* public void setMode(int value) {
* @return The current Players handle.getIntegers().write(0, value);
*/ }
@SuppressWarnings("unchecked")
public List<String> getPlayers() {
return (List<String>) handle.getSpecificModifier(Collection.class)
.read(0);
}
/** /**
* Set Players. * Retrieve pack option data. Pack data is calculated as follows:
* *
* @param value - new value. * <pre>
*/ * <code>
public void setPlayers(List<String> value) { * int data = 0;
handle.getSpecificModifier(Collection.class).write(0, value); * if (team.allowFriendlyFire()) {
} * data |= 1;
* }
* if (team.canSeeFriendlyInvisibles()) {
* data |= 2;
* }
* </code>
* </pre>
*
* @return The current pack option data
*/
public int getPackOptionData() {
return handle.getIntegers().read(1);
}
/** /**
* Retrieve Mode. * Set pack option data.
* <p> *
* Notes: if 0 then the team is created. If 1 then the team is removed. If 2 * @param value - new value
* the team team information is updated. If 3 then new players are added to * @see #getPackOptionData()
* the team. If 4 then players are removed from the team. */
* public void setPackOptionData(int value) {
* @return The current Mode handle.getIntegers().write(1, value);
*/ }
public int getMode() {
return handle.getIntegers().read(0);
}
/** /**
* Set Mode. * Enum containing all known modes.
* *
* @param value - new value. * @author dmulloy2
*/ */
public void setMode(int value) { public static class Mode extends IntEnum {
handle.getIntegers().write(0, value); public static final int TEAM_CREATED = 0;
} public static final int TEAM_REMOVED = 1;
public static final int TEAM_UPDATED = 2;
public static final int PLAYERS_ADDED = 3;
public static final int PLAYERS_REMOVED = 4;
/** private static final Mode INSTANCE = new Mode();
* Retrieve pack option data. Pack data is calculated as follows:
*
* <pre>
* <code>
* int data = 0;
* if (team.allowFriendlyFire()) {
* data |= 1;
* }
* if (team.canSeeFriendlyInvisibles()) {
* data |= 2;
* }
* </code>
* </pre>
*
* @return The current pack option data
*/
public int getPackOptionData() {
return handle.getIntegers().read(1);
}
/** public static Mode getInstance() {
* Set pack option data. return INSTANCE;
* }
* @param value - new value }
* @see #getPackOptionData()
*/
public void setPackOptionData(int value) {
handle.getIntegers().write(1, value);
}
} }

View file

@ -2,377 +2,376 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package fr.leomelki.com.comphenix.packetwrapper; package fr.leomelki.com.comphenix.packetwrapper;
import java.util.UUID;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import com.comphenix.protocol.PacketType; import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent; import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.injector.PacketConstructor; import com.comphenix.protocol.injector.PacketConstructor;
import com.comphenix.protocol.reflect.IntEnum; import com.comphenix.protocol.reflect.IntEnum;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import java.util.UUID;
public class WrapperPlayServerSpawnEntity extends AbstractPacket { public class WrapperPlayServerSpawnEntity extends AbstractPacket {
public static final PacketType TYPE = PacketType.Play.Server.SPAWN_ENTITY; public static final PacketType TYPE = PacketType.Play.Server.SPAWN_ENTITY;
private static PacketConstructor entityConstructor; private static PacketConstructor entityConstructor;
/** public WrapperPlayServerSpawnEntity() {
* Represents the different object types. super(new PacketContainer(TYPE), TYPE);
* handle.getModifier().writeDefaults();
* @author Kristian }
*/
public static class ObjectTypes extends IntEnum {
public static final int BOAT = 1;
public static final int ITEM_STACK = 2;
public static final int AREA_EFFECT_CLOUD = 3;
public static final int MINECART = 10;
public static final int ACTIVATED_TNT = 50;
public static final int ENDER_CRYSTAL = 51;
public static final int TIPPED_ARROW_PROJECTILE = 60;
public static final int SNOWBALL_PROJECTILE = 61;
public static final int EGG_PROJECTILE = 62;
public static final int GHAST_FIREBALL = 63;
public static final int BLAZE_FIREBALL = 64;
public static final int THROWN_ENDERPEARL = 65;
public static final int WITHER_SKULL_PROJECTILE = 66;
public static final int SHULKER_BULLET = 67;
public static final int FALLING_BLOCK = 70;
public static final int ITEM_FRAME = 71;
public static final int EYE_OF_ENDER = 72;
public static final int THROWN_POTION = 73;
public static final int THROWN_EXP_BOTTLE = 75;
public static final int FIREWORK_ROCKET = 76;
public static final int LEASH_KNOT = 77;
public static final int ARMORSTAND = 78;
public static final int FISHING_FLOAT = 90;
public static final int SPECTRAL_ARROW = 91;
public static final int DRAGON_FIREBALL = 93;
/** public WrapperPlayServerSpawnEntity(PacketContainer packet) {
* The singleton instance. Can also be retrieved from the parent class. super(packet, TYPE);
*/ }
private static final ObjectTypes INSTANCE = new ObjectTypes();
/** public WrapperPlayServerSpawnEntity(Entity entity, int type, int objectData) {
* Retrieve an instance of the object types enum. super(fromEntity(entity, type, objectData), TYPE);
* }
* @return Object type enum.
*/
public static ObjectTypes getInstance() {
return INSTANCE;
}
}
public WrapperPlayServerSpawnEntity() { // Useful constructor
super(new PacketContainer(TYPE), TYPE); private static PacketContainer fromEntity(Entity entity, int type,
handle.getModifier().writeDefaults(); int objectData) {
} if (entityConstructor == null)
entityConstructor =
ProtocolLibrary.getProtocolManager()
.createPacketConstructor(TYPE, entity, type,
objectData);
return entityConstructor.createPacket(entity, type, objectData);
}
public WrapperPlayServerSpawnEntity(PacketContainer packet) { /**
super(packet, TYPE); * Retrieve entity ID of the Object.
} *
* @return The current EID
*/
public int getEntityID() {
return handle.getIntegers().read(0);
}
public WrapperPlayServerSpawnEntity(Entity entity, int type, int objectData) { /**
super(fromEntity(entity, type, objectData), TYPE); * Set entity ID of the Object.
} *
* @param value - new value.
*/
public void setEntityID(int value) {
handle.getIntegers().write(0, value);
}
// Useful constructor /**
private static PacketContainer fromEntity(Entity entity, int type, * Retrieve the entity that will be spawned.
int objectData) { *
if (entityConstructor == null) * @param world - the current world of the entity.
entityConstructor = * @return The spawned entity.
ProtocolLibrary.getProtocolManager() */
.createPacketConstructor(TYPE, entity, type, public Entity getEntity(World world) {
objectData); return handle.getEntityModifier(world).read(0);
return entityConstructor.createPacket(entity, type, objectData); }
}
/** /**
* Retrieve entity ID of the Object. * Retrieve the entity that will be spawned.
* *
* @return The current EID * @param event - the packet event.
*/ * @return The spawned entity.
public int getEntityID() { */
return handle.getIntegers().read(0); public Entity getEntity(PacketEvent event) {
} return getEntity(event.getPlayer().getWorld());
}
/** public UUID getUniqueId() {
* Retrieve the entity that will be spawned. return handle.getUUIDs().read(0);
* }
* @param world - the current world of the entity.
* @return The spawned entity.
*/
public Entity getEntity(World world) {
return handle.getEntityModifier(world).read(0);
}
/** public void setUniqueId(UUID value) {
* Retrieve the entity that will be spawned. handle.getUUIDs().write(0, value);
* }
* @param event - the packet event.
* @return The spawned entity.
*/
public Entity getEntity(PacketEvent event) {
return getEntity(event.getPlayer().getWorld());
}
/** /**
* Set entity ID of the Object. * Retrieve the x position of the object.
* * <p>
* @param value - new value. * Note that the coordinate is rounded off to the nearest 1/32 of a meter.
*/ *
public void setEntityID(int value) { * @return The current X
handle.getIntegers().write(0, value); */
} public double getX() {
return handle.getDoubles().read(0);
}
public UUID getUniqueId() { /**
return handle.getUUIDs().read(0); * Set the x position of the object.
} *
* @param value - new value.
*/
public void setX(double value) {
handle.getDoubles().write(0, value);
}
public void setUniqueId(UUID value) { /**
handle.getUUIDs().write(0, value); * Retrieve the y position of the object.
} * <p>
* Note that the coordinate is rounded off to the nearest 1/32 of a meter.
*
* @return The current y
*/
public double getY() {
return handle.getDoubles().read(1);
}
/** /**
* Retrieve the x position of the object. * Set the y position of the object.
* <p> *
* Note that the coordinate is rounded off to the nearest 1/32 of a meter. * @param value - new value.
* */
* @return The current X public void setY(double value) {
*/ handle.getDoubles().write(1, value);
public double getX() { }
return handle.getDoubles().read(0);
}
/** /**
* Set the x position of the object. * Retrieve the z position of the object.
* * <p>
* @param value - new value. * Note that the coordinate is rounded off to the nearest 1/32 of a meter.
*/ *
public void setX(double value) { * @return The current z
handle.getDoubles().write(0, value); */
} public double getZ() {
return handle.getDoubles().read(2);
}
/** /**
* Retrieve the y position of the object. * Set the z position of the object.
* <p> *
* Note that the coordinate is rounded off to the nearest 1/32 of a meter. * @param value - new value.
* */
* @return The current y public void setZ(double value) {
*/ handle.getDoubles().write(2, value);
public double getY() { }
return handle.getDoubles().read(1);
}
/** /**
* Set the y position of the object. * Retrieve the optional speed x.
* * <p>
* @param value - new value. * This is ignored if {@link #getObjectData()} is zero.
*/ *
public void setY(double value) { * @return The optional speed x.
handle.getDoubles().write(1, value); */
} public double getOptionalSpeedX() {
return handle.getIntegers().read(1) / 8000.0D;
}
/** /**
* Retrieve the z position of the object. * Set the optional speed x.
* <p> *
* Note that the coordinate is rounded off to the nearest 1/32 of a meter. * @param value - new value.
* */
* @return The current z public void setOptionalSpeedX(double value) {
*/ handle.getIntegers().write(1, (int) (value * 8000.0D));
public double getZ() { }
return handle.getDoubles().read(2);
}
/** /**
* Set the z position of the object. * Retrieve the optional speed y.
* * <p>
* @param value - new value. * This is ignored if {@link #getObjectData()} is zero.
*/ *
public void setZ(double value) { * @return The optional speed y.
handle.getDoubles().write(2, value); */
} public double getOptionalSpeedY() {
return handle.getIntegers().read(2) / 8000.0D;
}
/** /**
* Retrieve the optional speed x. * Set the optional speed y.
* <p> *
* This is ignored if {@link #getObjectData()} is zero. * @param value - new value.
* */
* @return The optional speed x. public void setOptionalSpeedY(double value) {
*/ handle.getIntegers().write(2, (int) (value * 8000.0D));
public double getOptionalSpeedX() { }
return handle.getIntegers().read(1) / 8000.0D;
}
/** /**
* Set the optional speed x. * Retrieve the optional speed z.
* * <p>
* @param value - new value. * This is ignored if {@link #getObjectData()} is zero.
*/ *
public void setOptionalSpeedX(double value) { * @return The optional speed z.
handle.getIntegers().write(1, (int) (value * 8000.0D)); */
} public double getOptionalSpeedZ() {
return handle.getIntegers().read(3) / 8000.0D;
}
/** /**
* Retrieve the optional speed y. * Set the optional speed z.
* <p> *
* This is ignored if {@link #getObjectData()} is zero. * @param value - new value.
* */
* @return The optional speed y. public void setOptionalSpeedZ(double value) {
*/ handle.getIntegers().write(3, (int) (value * 8000.0D));
public double getOptionalSpeedY() { }
return handle.getIntegers().read(2) / 8000.0D;
}
/** /**
* Set the optional speed y. * Retrieve the pitch.
* *
* @param value - new value. * @return The current pitch.
*/ */
public void setOptionalSpeedY(double value) { public float getPitch() {
handle.getIntegers().write(2, (int) (value * 8000.0D)); return (handle.getIntegers().read(4) * 360.F) / 256.0F;
} }
/** /**
* Retrieve the optional speed z. * Set the pitch.
* <p> *
* This is ignored if {@link #getObjectData()} is zero. * @param value - new pitch.
* */
* @return The optional speed z. public void setPitch(float value) {
*/ handle.getIntegers().write(4, (int) (value * 256.0F / 360.0F));
public double getOptionalSpeedZ() { }
return handle.getIntegers().read(3) / 8000.0D;
}
/** /**
* Set the optional speed z. * Retrieve the yaw.
* *
* @param value - new value. * @return The current Yaw
*/ */
public void setOptionalSpeedZ(double value) { public float getYaw() {
handle.getIntegers().write(3, (int) (value * 8000.0D)); return (handle.getIntegers().read(5) * 360.F) / 256.0F;
} }
/** /**
* Retrieve the pitch. * Set the yaw of the object spawned.
* *
* @return The current pitch. * @param value - new yaw.
*/ */
public float getPitch() { public void setYaw(float value) {
return (handle.getIntegers().read(4) * 360.F) / 256.0F; handle.getIntegers().write(5, (int) (value * 256.0F / 360.0F));
} }
/** /**
* Set the pitch. * Retrieve the type of object. See {@link ObjectTypes}
* *
* @param value - new pitch. * @return The current Type
*/ */
public void setPitch(float value) { public int getType() {
handle.getIntegers().write(4, (int) (value * 256.0F / 360.0F)); return handle.getIntegers().read(6);
} }
/** /**
* Retrieve the yaw. * Set the type of object. See {@link ObjectTypes}.
* *
* @return The current Yaw * @param value - new value.
*/ */
public float getYaw() { public void setType(int value) {
return (handle.getIntegers().read(5) * 360.F) / 256.0F; handle.getIntegers().write(6, value);
} }
/** /**
* Set the yaw of the object spawned. * Retrieve object data.
* * <p>
* @param value - new yaw. * The content depends on the object type:
*/ * <table border="1" cellpadding="4">
public void setYaw(float value) { * <tr>
handle.getIntegers().write(5, (int) (value * 256.0F / 360.0F)); * <th>Object Type:</th>
} * <th>Name:</th>
* <th>Description</th>
* </tr>
* <tr>
* <td>ITEM_FRAME</td>
* <td>Orientation</td>
* <td>0-3: South, West, North, East</td>
* </tr>
* <tr>
* <td>FALLING_BLOCK</td>
* <td>Block Type</td>
* <td>BlockID | (Metadata << 0xC)</td>
* </tr>
* <tr>
* <td>Projectiles</td>
* <td>Entity ID</td>
* <td>The entity ID of the thrower</td>
* </tr>
* <tr>
* <td>Splash Potions</td>
* <td>Data Value</td>
* <td>Potion data value.</td>
* </tr>
* </table>
*
* @return The current object Data
*/
public int getObjectData() {
return handle.getIntegers().read(7);
}
/** /**
* Retrieve the type of object. See {@link ObjectTypes} * Set object Data.
* * <p>
* @return The current Type * The content depends on the object type. See {@link #getObjectData()} for
*/ * more information.
public int getType() { *
return handle.getIntegers().read(6); * @param value - new object data.
} */
public void setObjectData(int value) {
handle.getIntegers().write(7, value);
}
/** /**
* Set the type of object. See {@link ObjectTypes}. * Represents the different object types.
* *
* @param value - new value. * @author Kristian
*/ */
public void setType(int value) { public static class ObjectTypes extends IntEnum {
handle.getIntegers().write(6, value); public static final int BOAT = 1;
} public static final int ITEM_STACK = 2;
public static final int AREA_EFFECT_CLOUD = 3;
public static final int MINECART = 10;
public static final int ACTIVATED_TNT = 50;
public static final int ENDER_CRYSTAL = 51;
public static final int TIPPED_ARROW_PROJECTILE = 60;
public static final int SNOWBALL_PROJECTILE = 61;
public static final int EGG_PROJECTILE = 62;
public static final int GHAST_FIREBALL = 63;
public static final int BLAZE_FIREBALL = 64;
public static final int THROWN_ENDERPEARL = 65;
public static final int WITHER_SKULL_PROJECTILE = 66;
public static final int SHULKER_BULLET = 67;
public static final int FALLING_BLOCK = 70;
public static final int ITEM_FRAME = 71;
public static final int EYE_OF_ENDER = 72;
public static final int THROWN_POTION = 73;
public static final int THROWN_EXP_BOTTLE = 75;
public static final int FIREWORK_ROCKET = 76;
public static final int LEASH_KNOT = 77;
public static final int ARMORSTAND = 78;
public static final int FISHING_FLOAT = 90;
public static final int SPECTRAL_ARROW = 91;
public static final int DRAGON_FIREBALL = 93;
/** /**
* Retrieve object data. * The singleton instance. Can also be retrieved from the parent class.
* <p> */
* The content depends on the object type: private static final ObjectTypes INSTANCE = new ObjectTypes();
* <table border="1" cellpadding="4">
* <tr>
* <th>Object Type:</th>
* <th>Name:</th>
* <th>Description</th>
* </tr>
* <tr>
* <td>ITEM_FRAME</td>
* <td>Orientation</td>
* <td>0-3: South, West, North, East</td>
* </tr>
* <tr>
* <td>FALLING_BLOCK</td>
* <td>Block Type</td>
* <td>BlockID | (Metadata << 0xC)</td>
* </tr>
* <tr>
* <td>Projectiles</td>
* <td>Entity ID</td>
* <td>The entity ID of the thrower</td>
* </tr>
* <tr>
* <td>Splash Potions</td>
* <td>Data Value</td>
* <td>Potion data value.</td>
* </tr>
* </table>
*
* @return The current object Data
*/
public int getObjectData() {
return handle.getIntegers().read(7);
}
/** /**
* Set object Data. * Retrieve an instance of the object types enum.
* <p> *
* The content depends on the object type. See {@link #getObjectData()} for * @return Object type enum.
* more information. */
* public static ObjectTypes getInstance() {
* @param value - new object data. return INSTANCE;
*/ }
public void setObjectData(int value) { }
handle.getIntegers().write(7, value);
}
} }

View file

@ -2,312 +2,311 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package fr.leomelki.com.comphenix.packetwrapper; package fr.leomelki.com.comphenix.packetwrapper;
import java.util.UUID;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import com.comphenix.protocol.PacketType; import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent; import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.injector.PacketConstructor; import com.comphenix.protocol.injector.PacketConstructor;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import java.util.UUID;
public class WrapperPlayServerSpawnEntityLiving extends AbstractPacket { public class WrapperPlayServerSpawnEntityLiving extends AbstractPacket {
public static final PacketType TYPE = public static final PacketType TYPE =
PacketType.Play.Server.SPAWN_ENTITY_LIVING; PacketType.Play.Server.SPAWN_ENTITY_LIVING;
private static PacketConstructor entityConstructor; private static PacketConstructor entityConstructor;
public WrapperPlayServerSpawnEntityLiving() { public WrapperPlayServerSpawnEntityLiving() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerSpawnEntityLiving(PacketContainer packet) { public WrapperPlayServerSpawnEntityLiving(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
public WrapperPlayServerSpawnEntityLiving(Entity entity) { public WrapperPlayServerSpawnEntityLiving(Entity entity) {
super(fromEntity(entity), TYPE); super(fromEntity(entity), TYPE);
} }
// Useful constructor // Useful constructor
private static PacketContainer fromEntity(Entity entity) { private static PacketContainer fromEntity(Entity entity) {
if (entityConstructor == null) if (entityConstructor == null)
entityConstructor = entityConstructor =
ProtocolLibrary.getProtocolManager() ProtocolLibrary.getProtocolManager()
.createPacketConstructor(TYPE, entity); .createPacketConstructor(TYPE, entity);
return entityConstructor.createPacket(entity); return entityConstructor.createPacket(entity);
} }
/** /**
* Retrieve entity ID. * Retrieve entity ID.
* *
* @return The current EID * @return The current EID
*/ */
public int getEntityID() { public int getEntityID() {
return handle.getIntegers().read(0); return handle.getIntegers().read(0);
} }
/** /**
* Retrieve the entity that will be spawned. * Set entity ID.
* *
* @param world - the current world of the entity. * @param value - new value.
* @return The spawned entity. */
*/ public void setEntityID(int value) {
public Entity getEntity(World world) { handle.getIntegers().write(0, value);
return handle.getEntityModifier(world).read(0); }
}
/** /**
* Retrieve the entity that will be spawned. * Retrieve the entity that will be spawned.
* *
* @param event - the packet event. * @param world - the current world of the entity.
* @return The spawned entity. * @return The spawned entity.
*/ */
public Entity getEntity(PacketEvent event) { public Entity getEntity(World world) {
return getEntity(event.getPlayer().getWorld()); return handle.getEntityModifier(world).read(0);
} }
public UUID getUniqueId() { /**
return handle.getUUIDs().read(0); * Retrieve the entity that will be spawned.
} *
* @param event - the packet event.
* @return The spawned entity.
*/
public Entity getEntity(PacketEvent event) {
return getEntity(event.getPlayer().getWorld());
}
public void setUniqueId(UUID value) { public UUID getUniqueId() {
handle.getUUIDs().write(0, value); return handle.getUUIDs().read(0);
} }
/** public void setUniqueId(UUID value) {
* Set entity ID. handle.getUUIDs().write(0, value);
* }
* @param value - new value.
*/
public void setEntityID(int value) {
handle.getIntegers().write(0, value);
}
/** /**
* Retrieve the type of mob. * Retrieve the type of mob.
* *
* @return The current Type * @return The current Type
*/ */
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public EntityType getType() { public EntityType getType() {
return EntityType.fromId(handle.getIntegers().read(1)); return EntityType.fromId(handle.getIntegers().read(1));
} }
/** /**
* Set the type of mob. * Set the type of mob.
* *
* @param value - new value. * @param value - new value.
*/ */
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public void setType(EntityType value) { public void setType(EntityType value) {
handle.getIntegers().write(1, (int) value.getTypeId()); handle.getIntegers().write(1, (int) value.getTypeId());
} }
/** /**
* Retrieve the x position of the object. * Retrieve the x position of the object.
* <p> * <p>
* Note that the coordinate is rounded off to the nearest 1/32 of a meter. * Note that the coordinate is rounded off to the nearest 1/32 of a meter.
* *
* @return The current X * @return The current X
*/ */
public double getX() { public double getX() {
return handle.getDoubles().read(0); return handle.getDoubles().read(0);
} }
/** /**
* Set the x position of the object. * Set the x position of the object.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setX(double value) { public void setX(double value) {
handle.getDoubles().write(0, value); handle.getDoubles().write(0, value);
} }
/** /**
* Retrieve the y position of the object. * Retrieve the y position of the object.
* <p> * <p>
* Note that the coordinate is rounded off to the nearest 1/32 of a meter. * Note that the coordinate is rounded off to the nearest 1/32 of a meter.
* *
* @return The current y * @return The current y
*/ */
public double getY() { public double getY() {
return handle.getDoubles().read(1); return handle.getDoubles().read(1);
} }
/** /**
* Set the y position of the object. * Set the y position of the object.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setY(double value) { public void setY(double value) {
handle.getDoubles().write(1, value); handle.getDoubles().write(1, value);
} }
/** /**
* Retrieve the z position of the object. * Retrieve the z position of the object.
* <p> * <p>
* Note that the coordinate is rounded off to the nearest 1/32 of a meter. * Note that the coordinate is rounded off to the nearest 1/32 of a meter.
* *
* @return The current z * @return The current z
*/ */
public double getZ() { public double getZ() {
return handle.getDoubles().read(2); return handle.getDoubles().read(2);
} }
/** /**
* Set the z position of the object. * Set the z position of the object.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setZ(double value) { public void setZ(double value) {
handle.getDoubles().write(2, value); handle.getDoubles().write(2, value);
} }
/** /**
* Retrieve the yaw. * Retrieve the yaw.
* *
* @return The current Yaw * @return The current Yaw
*/ */
public float getYaw() { public float getYaw() {
return (handle.getBytes().read(0) * 360.F) / 256.0F; return (handle.getBytes().read(0) * 360.F) / 256.0F;
} }
/** /**
* Set the yaw of the spawned mob. * Set the yaw of the spawned mob.
* *
* @param value - new yaw. * @param value - new yaw.
*/ */
public void setYaw(float value) { public void setYaw(float value) {
handle.getBytes().write(0, (byte) (value * 256.0F / 360.0F)); handle.getBytes().write(0, (byte) (value * 256.0F / 360.0F));
} }
/** /**
* Retrieve the pitch. * Retrieve the pitch.
* *
* @return The current pitch * @return The current pitch
*/ */
public float getPitch() { public float getPitch() {
return (handle.getBytes().read(1) * 360.F) / 256.0F; return (handle.getBytes().read(1) * 360.F) / 256.0F;
} }
/** /**
* Set the pitch of the spawned mob. * Set the pitch of the spawned mob.
* *
* @param value - new pitch. * @param value - new pitch.
*/ */
public void setPitch(float value) { public void setPitch(float value) {
handle.getBytes().write(1, (byte) (value * 256.0F / 360.0F)); handle.getBytes().write(1, (byte) (value * 256.0F / 360.0F));
} }
/** /**
* Retrieve the yaw of the mob's head. * Retrieve the yaw of the mob's head.
* *
* @return The current yaw. * @return The current yaw.
*/ */
public float getHeadPitch() { public float getHeadPitch() {
return (handle.getBytes().read(2) * 360.F) / 256.0F; return (handle.getBytes().read(2) * 360.F) / 256.0F;
} }
/** /**
* Set the yaw of the mob's head. * Set the yaw of the mob's head.
* *
* @param value - new yaw. * @param value - new yaw.
*/ */
public void setHeadPitch(float value) { public void setHeadPitch(float value) {
handle.getBytes().write(2, (byte) (value * 256.0F / 360.0F)); handle.getBytes().write(2, (byte) (value * 256.0F / 360.0F));
} }
/** /**
* Retrieve the velocity in the x axis. * Retrieve the velocity in the x axis.
* *
* @return The current velocity X * @return The current velocity X
*/ */
public double getVelocityX() { public double getVelocityX() {
return handle.getIntegers().read(2) / 8000.0D; return handle.getIntegers().read(2) / 8000.0D;
} }
/** /**
* Set the velocity in the x axis. * Set the velocity in the x axis.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setVelocityX(double value) { public void setVelocityX(double value) {
handle.getIntegers().write(2, (int) (value * 8000.0D)); handle.getIntegers().write(2, (int) (value * 8000.0D));
} }
/** /**
* Retrieve the velocity in the y axis. * Retrieve the velocity in the y axis.
* *
* @return The current velocity y * @return The current velocity y
*/ */
public double getVelocityY() { public double getVelocityY() {
return handle.getIntegers().read(3) / 8000.0D; return handle.getIntegers().read(3) / 8000.0D;
} }
/** /**
* Set the velocity in the y axis. * Set the velocity in the y axis.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setVelocityY(double value) { public void setVelocityY(double value) {
handle.getIntegers().write(3, (int) (value * 8000.0D)); handle.getIntegers().write(3, (int) (value * 8000.0D));
} }
/** /**
* Retrieve the velocity in the z axis. * Retrieve the velocity in the z axis.
* *
* @return The current velocity z * @return The current velocity z
*/ */
public double getVelocityZ() { public double getVelocityZ() {
return handle.getIntegers().read(4) / 8000.0D; return handle.getIntegers().read(4) / 8000.0D;
} }
/** /**
* Set the velocity in the z axis. * Set the velocity in the z axis.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setVelocityZ(double value) { public void setVelocityZ(double value) {
handle.getIntegers().write(4, (int) (value * 8000.0D)); handle.getIntegers().write(4, (int) (value * 8000.0D));
} }
/** /**
* Retrieve the data watcher. * Retrieve the data watcher.
* <p> * <p>
* Content varies by mob, see Entities. * Content varies by mob, see Entities.
* *
* @return The current Metadata * @return The current Metadata
*/ */
/* public WrappedDataWatcher getMetadata() { /* public WrappedDataWatcher getMetadata() {
return handle.getDataWatcherModifier().read(0); return handle.getDataWatcherModifier().read(0);
}*/ }*/
/** /**
* Set the data watcher. * Set the data watcher.
* *
* @param value - new value. * @param value - new value.
*/ */
/*public void setMetadata(WrappedDataWatcher value) { /*public void setMetadata(WrappedDataWatcher value) {
handle.getDataWatcherModifier().write(0, value); handle.getDataWatcherModifier().write(0, value);
}*/ }*/

View file

@ -2,17 +2,17 @@
* This file is part of PacketWrapper. * This file is part of PacketWrapper.
* Copyright (C) 2012-2015 Kristian S. Strangeland * Copyright (C) 2012-2015 Kristian S. Strangeland
* Copyright (C) 2015 dmulloy2 * Copyright (C) 2015 dmulloy2
* * <p>
* PacketWrapper is free software: you can redistribute it and/or modify * PacketWrapper is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by * it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* PacketWrapper is distributed in the hope that it will be useful, * PacketWrapper is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU Lesser General Public License * You should have received a copy of the GNU Lesser General Public License
* along with PacketWrapper. If not, see <http://www.gnu.org/licenses/>. * along with PacketWrapper. If not, see <http://www.gnu.org/licenses/>.
*/ */
@ -45,10 +45,10 @@ public class WrapperPlayServerStopSound extends AbstractPacket {
} }
public EnumWrappers.SoundCategory getCategory() { public EnumWrappers.SoundCategory getCategory() {
return handle.getSoundCategories().readSafely(0); return handle.getSoundCategories().readSafely(0);
} }
public void setCategory(EnumWrappers.SoundCategory value) { public void setCategory(EnumWrappers.SoundCategory value) {
handle.getSoundCategories().writeSafely(0, value); handle.getSoundCategories().writeSafely(0, value);
} }
} }

View file

@ -2,17 +2,17 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
@ -24,108 +24,108 @@ import com.comphenix.protocol.wrappers.EnumWrappers.TitleAction;
import com.comphenix.protocol.wrappers.WrappedChatComponent; import com.comphenix.protocol.wrappers.WrappedChatComponent;
public class WrapperPlayServerTitle extends AbstractPacket { public class WrapperPlayServerTitle extends AbstractPacket {
public static final PacketType TYPE = PacketType.Play.Server.TITLE; public static final PacketType TYPE = PacketType.Play.Server.TITLE;
public WrapperPlayServerTitle() { public WrapperPlayServerTitle() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerTitle(PacketContainer packet) { public WrapperPlayServerTitle(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
/** /**
* Retrieve Action. * Retrieve Action.
* *
* @return The current Action * @return The current Action
*/ */
public TitleAction getAction() { public TitleAction getAction() {
return handle.getTitleActions().read(0); return handle.getTitleActions().read(0);
} }
/** /**
* Set Action. * Set Action.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setAction(TitleAction value) { public void setAction(TitleAction value) {
handle.getTitleActions().write(0, value); handle.getTitleActions().write(0, value);
} }
/** /**
* Retrieve 0 (TITLE). * Retrieve 0 (TITLE).
* <p> * <p>
* Notes: chat * Notes: chat
* *
* @return The current 0 (TITLE) * @return The current 0 (TITLE)
*/ */
public WrappedChatComponent getTitle() { public WrappedChatComponent getTitle() {
return handle.getChatComponents().read(0); return handle.getChatComponents().read(0);
} }
/** /**
* Set 0 (TITLE). * Set 0 (TITLE).
* *
* @param value - new value. * @param value - new value.
*/ */
public void setTitle(WrappedChatComponent value) { public void setTitle(WrappedChatComponent value) {
handle.getChatComponents().write(0, value); handle.getChatComponents().write(0, value);
} }
/** /**
* Retrieve 2 (TIMES). * Retrieve 2 (TIMES).
* <p> * <p>
* Notes: int * Notes: int
* *
* @return The current 2 (TIMES) * @return The current 2 (TIMES)
*/ */
public int getFadeIn() { public int getFadeIn() {
return handle.getIntegers().read(0); return handle.getIntegers().read(0);
} }
/** /**
* Set 2 (TIMES). * Set 2 (TIMES).
* *
* @param value - new value. * @param value - new value.
*/ */
public void setFadeIn(int value) { public void setFadeIn(int value) {
handle.getIntegers().write(0, value); handle.getIntegers().write(0, value);
} }
/** /**
* Retrieve Stay. * Retrieve Stay.
* *
* @return The current Stay * @return The current Stay
*/ */
public int getStay() { public int getStay() {
return handle.getIntegers().read(1); return handle.getIntegers().read(1);
} }
/** /**
* Set Stay. * Set Stay.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setStay(int value) { public void setStay(int value) {
handle.getIntegers().write(1, value); handle.getIntegers().write(1, value);
} }
/** /**
* Retrieve Fade Out. * Retrieve Fade Out.
* *
* @return The current Fade Out * @return The current Fade Out
*/ */
public int getFadeOut() { public int getFadeOut() {
return handle.getIntegers().read(2); return handle.getIntegers().read(2);
} }
/** /**
* Set Fade Out. * Set Fade Out.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setFadeOut(int value) { public void setFadeOut(int value) {
handle.getIntegers().write(2, value); handle.getIntegers().write(2, value);
} }
} }

View file

@ -2,17 +2,17 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
@ -22,75 +22,75 @@ import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
public class WrapperPlayServerUpdateHealth extends AbstractPacket { public class WrapperPlayServerUpdateHealth extends AbstractPacket {
public static final PacketType TYPE = PacketType.Play.Server.UPDATE_HEALTH; public static final PacketType TYPE = PacketType.Play.Server.UPDATE_HEALTH;
public WrapperPlayServerUpdateHealth() { public WrapperPlayServerUpdateHealth() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerUpdateHealth(PacketContainer packet) { public WrapperPlayServerUpdateHealth(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
/** /**
* Retrieve Health. * Retrieve Health.
* <p> * <p>
* Notes: 0 or less = dead, 20 = full HP * Notes: 0 or less = dead, 20 = full HP
* *
* @return The current Health * @return The current Health
*/ */
public float getHealth() { public float getHealth() {
return handle.getFloat().read(0); return handle.getFloat().read(0);
} }
/** /**
* Set Health. * Set Health.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setHealth(float value) { public void setHealth(float value) {
handle.getFloat().write(0, value); handle.getFloat().write(0, value);
} }
/** /**
* Retrieve Food. * Retrieve Food.
* <p> * <p>
* Notes: 0 - 20 * Notes: 0 - 20
* *
* @return The current Food * @return The current Food
*/ */
public int getFood() { public int getFood() {
return handle.getIntegers().read(0); return handle.getIntegers().read(0);
} }
/** /**
* Set Food. * Set Food.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setFood(int value) { public void setFood(int value) {
handle.getIntegers().write(0, value); handle.getIntegers().write(0, value);
} }
/** /**
* Retrieve Food Saturation. * Retrieve Food Saturation.
* <p> * <p>
* Notes: seems to vary from 0.0 to 5.0 in integer increments * Notes: seems to vary from 0.0 to 5.0 in integer increments
* *
* @return The current Food Saturation * @return The current Food Saturation
*/ */
public float getFoodSaturation() { public float getFoodSaturation() {
return handle.getFloat().read(1); return handle.getFloat().read(1);
} }
/** /**
* Set Food Saturation. * Set Food Saturation.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setFoodSaturation(float value) { public void setFoodSaturation(float value) {
handle.getFloat().write(1, value); handle.getFloat().write(1, value);
} }
} }

View file

@ -2,17 +2,17 @@
* PacketWrapper - ProtocolLib wrappers for Minecraft packets * PacketWrapper - ProtocolLib wrappers for Minecraft packets
* Copyright (C) dmulloy2 <http://dmulloy2.net> * Copyright (C) dmulloy2 <http://dmulloy2.net>
* Copyright (C) Kristian S. Strangeland * Copyright (C) Kristian S. Strangeland
* * <p>
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* * <p>
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* * <p>
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
@ -22,56 +22,56 @@ import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
public class WrapperPlayServerUpdateTime extends AbstractPacket { public class WrapperPlayServerUpdateTime extends AbstractPacket {
public static final PacketType TYPE = PacketType.Play.Server.UPDATE_TIME; public static final PacketType TYPE = PacketType.Play.Server.UPDATE_TIME;
public WrapperPlayServerUpdateTime() { public WrapperPlayServerUpdateTime() {
super(new PacketContainer(TYPE), TYPE); super(new PacketContainer(TYPE), TYPE);
handle.getModifier().writeDefaults(); handle.getModifier().writeDefaults();
} }
public WrapperPlayServerUpdateTime(PacketContainer packet) { public WrapperPlayServerUpdateTime(PacketContainer packet) {
super(packet, TYPE); super(packet, TYPE);
} }
/** /**
* Retrieve Age of the world. * Retrieve Age of the world.
* <p> * <p>
* Notes: in ticks; not changed by server commands * Notes: in ticks; not changed by server commands
* *
* @return The current Age of the world * @return The current Age of the world
*/ */
public long getAgeOfTheWorld() { public long getAgeOfTheWorld() {
return handle.getLongs().read(0); return handle.getLongs().read(0);
} }
/** /**
* Set Age of the world. * Set Age of the world.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setAgeOfTheWorld(long value) { public void setAgeOfTheWorld(long value) {
handle.getLongs().write(0, value); handle.getLongs().write(0, value);
} }
/** /**
* Retrieve Time of day. * Retrieve Time of day.
* <p> * <p>
* Notes: the world (or region) time, in ticks. If negative the sun will * Notes: the world (or region) time, in ticks. If negative the sun will
* stop moving at the Math.abs of the time * stop moving at the Math.abs of the time
* *
* @return The current Time of day * @return The current Time of day
*/ */
public long getTimeOfDay() { public long getTimeOfDay() {
return handle.getLongs().read(1); return handle.getLongs().read(1);
} }
/** /**
* Set Time of day. * Set Time of day.
* *
* @param value - new value. * @param value - new value.
*/ */
public void setTimeOfDay(long value) { public void setTimeOfDay(long value) {
handle.getLongs().write(1, value); handle.getLongs().write(1, value);
} }
} }

View file

@ -1,18 +1,26 @@
package fr.leomelki.loupgarou; package fr.leomelki.loupgarou;
import java.io.File; import com.comphenix.protocol.PacketType;
import java.lang.reflect.Constructor; import com.comphenix.protocol.ProtocolLibrary;
import java.util.ArrayList; import com.comphenix.protocol.ProtocolManager;
import java.util.Arrays; import com.comphenix.protocol.events.ListenerPriority;
import java.util.HashMap; import com.comphenix.protocol.events.PacketAdapter;
import java.util.List; import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.wrappers.EnumWrappers.ItemSlot;
import org.bukkit.Bukkit; import com.comphenix.protocol.wrappers.PlayerInfoData;
import org.bukkit.ChatColor; import com.comphenix.protocol.wrappers.WrappedChatComponent;
import org.bukkit.Location; import fr.leomelki.com.comphenix.packetwrapper.*;
import org.bukkit.Material; import fr.leomelki.loupgarou.classes.LGGame;
import org.bukkit.Sound; import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.classes.LGWinType;
import fr.leomelki.loupgarou.events.LGSkinLoadEvent;
import fr.leomelki.loupgarou.events.LGUpdatePrefixEvent;
import fr.leomelki.loupgarou.listeners.*;
import fr.leomelki.loupgarou.roles.*;
import lombok.Getter;
import lombok.Setter;
import org.bukkit.*;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
@ -25,419 +33,378 @@ import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser; import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException; import org.json.simple.parser.ParseException;
import com.comphenix.protocol.PacketType; import java.io.File;
import com.comphenix.protocol.ProtocolLibrary; import java.lang.reflect.Constructor;
import com.comphenix.protocol.ProtocolManager; import java.util.ArrayList;
import com.comphenix.protocol.events.ListenerPriority; import java.util.Arrays;
import com.comphenix.protocol.events.PacketAdapter; import java.util.HashMap;
import com.comphenix.protocol.events.PacketEvent; import java.util.List;
import com.comphenix.protocol.wrappers.EnumWrappers.ItemSlot;
import com.comphenix.protocol.wrappers.PlayerInfoData;
import com.comphenix.protocol.wrappers.WrappedChatComponent;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerEntityEquipment; public class MainLg extends JavaPlugin {
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerNamedSoundEffect; @Getter
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerPlayerInfo; private static final String prefix = ""/*"§7[§9Loup-Garou§7] "*/;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerScoreboardTeam; private static MainLg instance;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerUpdateHealth; @Getter
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerUpdateTime; private final HashMap<String, Constructor<? extends Role>> roles = new HashMap<>();
import fr.leomelki.loupgarou.classes.LGGame; @Getter
import fr.leomelki.loupgarou.classes.LGPlayer; @Setter
import fr.leomelki.loupgarou.classes.LGWinType; private LGGame currentGame;//Because for now, only one game will be playable on one server (flemme)
import fr.leomelki.loupgarou.events.LGSkinLoadEvent;
import fr.leomelki.loupgarou.events.LGUpdatePrefixEvent;
import fr.leomelki.loupgarou.listeners.CancelListener;
import fr.leomelki.loupgarou.listeners.ChatListener;
import fr.leomelki.loupgarou.listeners.JoinListener;
import fr.leomelki.loupgarou.listeners.LoupGarouListener;
import fr.leomelki.loupgarou.listeners.VoteListener;
import fr.leomelki.loupgarou.roles.RAnge;
import fr.leomelki.loupgarou.roles.RAssassin;
import fr.leomelki.loupgarou.roles.RBouffon;
import fr.leomelki.loupgarou.roles.RChaperonRouge;
import fr.leomelki.loupgarou.roles.RChasseur;
import fr.leomelki.loupgarou.roles.RChasseurDeVampire;
import fr.leomelki.loupgarou.roles.RChienLoup;
import fr.leomelki.loupgarou.roles.RCorbeau;
import fr.leomelki.loupgarou.roles.RCupidon;
import fr.leomelki.loupgarou.roles.RDetective;
import fr.leomelki.loupgarou.roles.RDictateur;
import fr.leomelki.loupgarou.roles.REnfantSauvage;
import fr.leomelki.loupgarou.roles.RFaucheur;
import fr.leomelki.loupgarou.roles.RGarde;
import fr.leomelki.loupgarou.roles.RGrandMechantLoup;
import fr.leomelki.loupgarou.roles.RLoupGarou;
import fr.leomelki.loupgarou.roles.RLoupGarouBlanc;
import fr.leomelki.loupgarou.roles.RLoupGarouNoir;
import fr.leomelki.loupgarou.roles.RMedium;
import fr.leomelki.loupgarou.roles.RMontreurDOurs;
import fr.leomelki.loupgarou.roles.RPetiteFille;
import fr.leomelki.loupgarou.roles.RPirate;
import fr.leomelki.loupgarou.roles.RPretre;
import fr.leomelki.loupgarou.roles.RPyromane;
import fr.leomelki.loupgarou.roles.RSorciere;
import fr.leomelki.loupgarou.roles.RSurvivant;
import fr.leomelki.loupgarou.roles.RVampire;
import fr.leomelki.loupgarou.roles.RVillageois;
import fr.leomelki.loupgarou.roles.RVoyante;
import fr.leomelki.loupgarou.roles.Role;
import lombok.Getter;
import lombok.Setter;
public class MainLg extends JavaPlugin{ public static MainLg getInstance() {
private static MainLg instance; return instance;
@Getter private final HashMap<String, Constructor<? extends Role>> roles = new HashMap<>(); }
@Getter private static final String prefix = ""/*"§7[§9Loup-Garou§7] "*/;
@Getter @Setter private LGGame currentGame;//Because for now, only one game will be playable on one server (flemme) @Override
public void onEnable() {
instance = this;
loadRoles();
if (!new File(getDataFolder(), "config.yml").exists()) {//Créer la config
FileConfiguration config = getConfig();
config.set("spawns", new ArrayList<List<Double>>());
for (String role : roles.keySet())//Nombre de participant pour chaque rôle
config.set("role." + role, 1);
saveConfig();
}
loadConfig();
Bukkit.getPluginManager().registerEvents(new JoinListener(this), this);
Bukkit.getPluginManager().registerEvents(new CancelListener(this), this);
Bukkit.getPluginManager().registerEvents(new VoteListener(this), this);
Bukkit.getPluginManager().registerEvents(new ChatListener(this), this);
Bukkit.getPluginManager().registerEvents(new LoupGarouListener(), this);
@Override for (Player player : Bukkit.getOnlinePlayers())
public void onEnable() { Bukkit.getPluginManager().callEvent(new PlayerJoinEvent(player, "is connected"));
instance = this;
loadRoles();
if(!new File(getDataFolder(), "config.yml").exists()) {//Créer la config
FileConfiguration config = getConfig();
config.set("spawns", new ArrayList<List<Double>>());
for(String role : roles.keySet())//Nombre de participant pour chaque rôle
config.set("role."+role, 1);
saveConfig();
}
loadConfig();
Bukkit.getPluginManager().registerEvents(new JoinListener(this), this);
Bukkit.getPluginManager().registerEvents(new CancelListener(this), this);
Bukkit.getPluginManager().registerEvents(new VoteListener(this), this);
Bukkit.getPluginManager().registerEvents(new ChatListener(this), this);
Bukkit.getPluginManager().registerEvents(new LoupGarouListener(), this);
for(Player player : Bukkit.getOnlinePlayers()) ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
Bukkit.getPluginManager().callEvent(new PlayerJoinEvent(player, "is connected")); protocolManager.addPacketListener(new PacketAdapter(this, ListenerPriority.NORMAL, PacketType.Play.Server.UPDATE_TIME) {
@Override
public void onPacketSending(PacketEvent event) {
WrapperPlayServerUpdateTime time = new WrapperPlayServerUpdateTime(event.getPacket());
LGPlayer lgp = LGPlayer.thePlayer(instance, event.getPlayer());
if (lgp.getGame() != null && lgp.getGame().getTime() != time.getTimeOfDay())
event.setCancelled(true);
}
}
);
//Éviter que les gens s'entendent quand ils se sélectionnent et qu'ils sont trop proche
protocolManager.addPacketListener(new PacketAdapter(this, ListenerPriority.NORMAL, PacketType.Play.Server.NAMED_SOUND_EFFECT) {
@Override
public void onPacketSending(PacketEvent event) {
WrapperPlayServerNamedSoundEffect sound = new WrapperPlayServerNamedSoundEffect(event.getPacket());
if (sound.getSoundEffect() == Sound.ENTITY_PLAYER_ATTACK_NODAMAGE)
event.setCancelled(true);
}
}
);
protocolManager.addPacketListener(new PacketAdapter(this, ListenerPriority.NORMAL, PacketType.Play.Server.PLAYER_INFO) {
@Override
public void onPacketSending(PacketEvent event) {
LGPlayer player = LGPlayer.thePlayer(instance, event.getPlayer());
WrapperPlayServerPlayerInfo info = new WrapperPlayServerPlayerInfo(event.getPacket());
ArrayList<PlayerInfoData> datas = new ArrayList<>();
for (PlayerInfoData data : info.getData()) {
LGPlayer lgp = LGPlayer.thePlayer(instance, Bukkit.getPlayer(data.getProfile().getUUID()));
if (player.getGame() != null && player.getGame() == lgp.getGame()) {
LGUpdatePrefixEvent evt2 = new LGUpdatePrefixEvent(player.getGame(), lgp, player, "");
WrappedChatComponent displayName = data.getDisplayName();
Bukkit.getPluginManager().callEvent(evt2);
if (evt2.getPrefix().length() > 0) {
try {
if (displayName != null) {
JSONObject obj = (JSONObject) new JSONParser().parse(displayName.getJson());
displayName = WrappedChatComponent.fromText(evt2.getPrefix() + obj.get("text"));
} else
displayName = WrappedChatComponent.fromText(evt2.getPrefix() + data.getProfile().getName());
} catch (ParseException e) {
e.printStackTrace();
}
}
LGSkinLoadEvent evt = new LGSkinLoadEvent(lgp.getGame(), lgp, player, data.getProfile());
Bukkit.getPluginManager().callEvent(evt);
datas.add(new PlayerInfoData(evt.getProfile(), data.getLatency(), data.getGameMode(), displayName));
} else
datas.add(data);
}
info.setData(datas);
}
});
protocolManager.addPacketListener(new PacketAdapter(this, ListenerPriority.NORMAL, PacketType.Play.Server.UPDATE_HEALTH) {
@Override
public void onPacketSending(PacketEvent event) {
LGPlayer player = LGPlayer.thePlayer(instance, event.getPlayer());
if (player.getGame() != null && player.getGame().isStarted()) {
WrapperPlayServerUpdateHealth health = new WrapperPlayServerUpdateHealth(event.getPacket());
health.setFood(6);
}
}
});
protocolManager.addPacketListener(new PacketAdapter(this, ListenerPriority.NORMAL, PacketType.Play.Server.SCOREBOARD_TEAM) {
@Override
public void onPacketSending(PacketEvent event) {
LGPlayer player = LGPlayer.thePlayer(instance, event.getPlayer());
WrapperPlayServerScoreboardTeam team = new WrapperPlayServerScoreboardTeam(event.getPacket());
team.setColor(ChatColor.WHITE);
Player other = Bukkit.getPlayer(team.getName());
if (other == null) return;
LGPlayer lgp = LGPlayer.thePlayer(instance, other);
if (player.getGame() != null && player.getGame() == lgp.getGame()) {
LGUpdatePrefixEvent evt2 = new LGUpdatePrefixEvent(player.getGame(), lgp, player, "");
Bukkit.getPluginManager().callEvent(evt2);
if (evt2.getPrefix().length() > 0)
team.setPrefix(WrappedChatComponent.fromText(evt2.getPrefix()));
else
team.setPrefix(WrappedChatComponent.fromText("§f"));
}
}
});
protocolManager.addPacketListener(new PacketAdapter(this, ListenerPriority.NORMAL, PacketType.Play.Server.ENTITY_EQUIPMENT) {
@Override
public void onPacketSending(PacketEvent event) {
LGPlayer player = LGPlayer.thePlayer(instance, event.getPlayer());
if (player.getGame() != null) {
WrapperPlayServerEntityEquipment equip = new WrapperPlayServerEntityEquipment(event.getPacket());
if (equip.getSlot() == ItemSlot.OFFHAND && equip.getEntityID() != player.getPlayer().getEntityId())
equip.setItem(new ItemStack(Material.AIR));
}
}
});
ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager(); }
protocolManager.addPacketListener(new PacketAdapter(this, ListenerPriority.NORMAL, PacketType.Play.Server.UPDATE_TIME) {
@Override
public void onPacketSending(PacketEvent event) {
WrapperPlayServerUpdateTime time = new WrapperPlayServerUpdateTime(event.getPacket());
LGPlayer lgp = LGPlayer.thePlayer(instance, event.getPlayer());
if(lgp.getGame() != null && lgp.getGame().getTime() != time.getTimeOfDay())
event.setCancelled(true);
}
}
);
//Éviter que les gens s'entendent quand ils se sélectionnent et qu'ils sont trop proche
protocolManager.addPacketListener(new PacketAdapter(this, ListenerPriority.NORMAL, PacketType.Play.Server.NAMED_SOUND_EFFECT) {
@Override
public void onPacketSending(PacketEvent event) {
WrapperPlayServerNamedSoundEffect sound = new WrapperPlayServerNamedSoundEffect(event.getPacket());
if(sound.getSoundEffect() == Sound.ENTITY_PLAYER_ATTACK_NODAMAGE)
event.setCancelled(true);
}
}
);
protocolManager.addPacketListener(new PacketAdapter(this, ListenerPriority.NORMAL, PacketType.Play.Server.PLAYER_INFO) {
@Override
public void onPacketSending(PacketEvent event) {
LGPlayer player = LGPlayer.thePlayer(instance, event.getPlayer());
WrapperPlayServerPlayerInfo info = new WrapperPlayServerPlayerInfo(event.getPacket());
ArrayList<PlayerInfoData> datas = new ArrayList<>();
for(PlayerInfoData data : info.getData()) {
LGPlayer lgp = LGPlayer.thePlayer(instance, Bukkit.getPlayer(data.getProfile().getUUID()));
if(player.getGame() != null && player.getGame() == lgp.getGame()) {
LGUpdatePrefixEvent evt2 = new LGUpdatePrefixEvent(player.getGame(), lgp, player, "");
WrappedChatComponent displayName = data.getDisplayName();
Bukkit.getPluginManager().callEvent(evt2);
if(evt2.getPrefix().length() > 0) {
try {
if(displayName != null) {
JSONObject obj = (JSONObject) new JSONParser().parse(displayName.getJson());
displayName = WrappedChatComponent.fromText(evt2.getPrefix()+obj.get("text"));
} else
displayName = WrappedChatComponent.fromText(evt2.getPrefix()+data.getProfile().getName());
} catch (ParseException e) {
e.printStackTrace();
}
}
LGSkinLoadEvent evt = new LGSkinLoadEvent(lgp.getGame(), lgp, player, data.getProfile());
Bukkit.getPluginManager().callEvent(evt);
datas.add(new PlayerInfoData(evt.getProfile(), data.getLatency(), data.getGameMode(), displayName));
}else
datas.add(data);
}
info.setData(datas);
}
});
protocolManager.addPacketListener(new PacketAdapter(this, ListenerPriority.NORMAL, PacketType.Play.Server.UPDATE_HEALTH) {
@Override
public void onPacketSending(PacketEvent event) {
LGPlayer player = LGPlayer.thePlayer(instance, event.getPlayer());
if(player.getGame() != null && player.getGame().isStarted()) {
WrapperPlayServerUpdateHealth health = new WrapperPlayServerUpdateHealth(event.getPacket());
health.setFood(6);
}
}
});
protocolManager.addPacketListener(new PacketAdapter(this, ListenerPriority.NORMAL, PacketType.Play.Server.SCOREBOARD_TEAM) {
@Override
public void onPacketSending(PacketEvent event) {
LGPlayer player = LGPlayer.thePlayer(instance, event.getPlayer());
WrapperPlayServerScoreboardTeam team = new WrapperPlayServerScoreboardTeam(event.getPacket());
team.setColor(ChatColor.WHITE);
Player other = Bukkit.getPlayer(team.getName());
if(other == null)return;
LGPlayer lgp = LGPlayer.thePlayer(instance, other);
if(player.getGame() != null && player.getGame() == lgp.getGame()) {
LGUpdatePrefixEvent evt2 = new LGUpdatePrefixEvent(player.getGame(), lgp, player, "");
Bukkit.getPluginManager().callEvent(evt2);
if(evt2.getPrefix().length() > 0)
team.setPrefix(WrappedChatComponent.fromText(evt2.getPrefix()));
else
team.setPrefix(WrappedChatComponent.fromText("§f"));
}
}
});
protocolManager.addPacketListener(new PacketAdapter(this, ListenerPriority.NORMAL, PacketType.Play.Server.ENTITY_EQUIPMENT) {
@Override
public void onPacketSending(PacketEvent event) {
LGPlayer player = LGPlayer.thePlayer(instance, event.getPlayer());
if(player.getGame() != null) {
WrapperPlayServerEntityEquipment equip = new WrapperPlayServerEntityEquipment(event.getPacket());
if(equip.getSlot() == ItemSlot.OFFHAND && equip.getEntityID() != player.getPlayer().getEntityId())
equip.setItem(new ItemStack(Material.AIR));
}
}
});
} @SuppressWarnings("unchecked")
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (label.equalsIgnoreCase("ww")) {
if (!sender.hasPermission("loupgarou.admin")) {
sender.sendMessage(prefix + "§4Erreur: Vous n'avez pas la permission...");
return true;
}
if (args.length >= 1) {
if (args[0].equalsIgnoreCase("addspawn")) {
Player player = (Player) sender;
Location loc = player.getLocation();
List<Object> list = (List<Object>) getConfig().getList("spawns");
list.add(Arrays.asList((double) loc.getBlockX(), loc.getY(), (double) loc.getBlockZ(), (double) loc.getYaw(), (double) loc.getPitch()));
saveConfig();
loadConfig();
sender.sendMessage(prefix + "§aLa position a bien été ajoutée !");
return true;
} else if (args[0].equalsIgnoreCase("end")) {
if (args.length != 2) {
sender.sendMessage("§4Utilisation : §c/lg end <pseudo>");
return true;
}
Player selected = Bukkit.getPlayer(args[1]);
if (selected == null) {
sender.sendMessage("§4Erreur : §cLe joueur §4" + args[1] + "§c n'est pas connecté.");
return true;
}
LGGame game = LGPlayer.thePlayer(instance, selected).getGame();
if (game == null) {
sender.sendMessage("§4Erreur : §cLe joueur §4" + selected.getName() + "§c n'est pas dans une partie.");
return true;
}
game.cancelWait();
game.endGame(LGWinType.EQUAL);
game.broadcastMessage("§cLa partie a été arrêtée de force !");
return true;
} else if (args[0].equalsIgnoreCase("start")) {
if (args.length < 2) {
sender.sendMessage("§4Utilisation : §c/lg start <pseudo>");
return true;
}
Player player = Bukkit.getPlayer(args[1]);
if (player == null) {
sender.sendMessage("§4Erreur : §cLe joueur §4" + args[1] + "§c n'existe pas !");
return true;
}
LGPlayer lgp = LGPlayer.thePlayer(instance, player);
if (lgp.getGame() == null) {
sender.sendMessage("§4Erreur : §cLe joueur §4" + lgp.getName() + "§c n'est pas dans une partie.");
return true;
}
if (MainLg.getInstance().getConfig().getList("spawns").size() < lgp.getGame().getMaxPlayers()) {
sender.sendMessage("§4Erreur : §cIl n'y a pas assez de points de spawn !");
sender.sendMessage("§8§oPour les définir, merci de faire §7/lg addSpawn");
return true;
}
sender.sendMessage("§aVous avez bien démarré une nouvelle partie !");
lgp.getGame().updateStart();
return true;
} else if (args[0].equalsIgnoreCase("reloadconfig")) {
sender.sendMessage("§aVous avez bien reload la config !");
sender.sendMessage("§7§oSi vous avez changé les rôles, écriver §8§o/lg joinall§7§o !");
loadConfig();
return true;
} else if (args[0].equalsIgnoreCase("joinall")) {
for (Player p : Bukkit.getOnlinePlayers())
Bukkit.getPluginManager().callEvent(new PlayerQuitEvent(p, "joinall"));
for (Player p : Bukkit.getOnlinePlayers())
Bukkit.getPluginManager().callEvent(new PlayerJoinEvent(p, "joinall"));
return true;
} else if (args[0].equalsIgnoreCase("reloadPacks")) {
for (Player p : Bukkit.getOnlinePlayers())
Bukkit.getPluginManager().callEvent(new PlayerQuitEvent(p, "reloadPacks"));
for (Player p : Bukkit.getOnlinePlayers())
Bukkit.getPluginManager().callEvent(new PlayerJoinEvent(p, "reloadPacks"));
return true;
} else if (args[0].equalsIgnoreCase("nextNight")) {
sender.sendMessage("§aVous êtes passé à la prochaine nuit");
if (getCurrentGame() != null) {
getCurrentGame().broadcastMessage("§2§lLe passage à la prochaine nuit a été forcé !");
for (LGPlayer lgp : getCurrentGame().getInGame())
lgp.stopChoosing();
getCurrentGame().cancelWait();
getCurrentGame().nextNight();
}
return true;
} else if (args[0].equalsIgnoreCase("nextDay")) {
sender.sendMessage("§aVous êtes passé à la prochaine journée");
if (getCurrentGame() != null) {
getCurrentGame().broadcastMessage("§2§lLe passage à la prochaine journée a été forcé !");
getCurrentGame().cancelWait();
for (LGPlayer lgp : getCurrentGame().getInGame())
lgp.stopChoosing();
getCurrentGame().endNight();
}
return true;
} else if (args[0].equalsIgnoreCase("roles")) {
if (args.length == 1 || args[1].equalsIgnoreCase("list")) {
sender.sendMessage(prefix + "§6Voici la liste des rôles:");
int index = 0;
for (String role : getRoles().keySet())
sender.sendMessage(prefix + " §e- " + index++ + " - §6" + role + " §e> " + MainLg.getInstance().getConfig().getInt("role." + role));
sender.sendMessage("\n" + prefix + " §7Écrivez §8§o/lg roles set <role_id/role_name> <nombre>§7 pour définir le nombre de joueurs qui devrons avoir ce rôle.");
} else {
if (args[1].equalsIgnoreCase("set") && args.length == 4) {
String role = null;
if (args[2].length() <= 2)
try {
int i = Integer.parseInt(args[2]);
Object[] array = getRoles().keySet().toArray();
if (array.length <= i) {
sender.sendMessage(prefix + "§4Erreur: §cCe rôle n'existe pas.");
return true;
} else
role = (String) array[i];
} catch (Exception err) {
sender.sendMessage(prefix + "§4Erreur: §cCeci n'est pas un nombre");
}
else
role = args[2];
@SuppressWarnings("unchecked") if (role != null) {
@Override String real_role = null;
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { for (String real : getRoles().keySet())
if(label.equalsIgnoreCase("ww")) { if (real.equalsIgnoreCase(role)) {
if(!sender.hasPermission("loupgarou.admin")) { real_role = real;
sender.sendMessage(prefix+"§4Erreur: Vous n'avez pas la permission..."); break;
return true; }
}
if(args.length >= 1) {
if(args[0].equalsIgnoreCase("addspawn")) {
Player player = (Player)sender;
Location loc = player.getLocation();
List<Object> list = (List<Object>) getConfig().getList("spawns");
list.add(Arrays.asList((double)loc.getBlockX(), loc.getY(), (double)loc.getBlockZ(), (double)loc.getYaw(), (double)loc.getPitch()));
saveConfig();
loadConfig();
sender.sendMessage(prefix+"§aLa position a bien été ajoutée !");
return true;
}else if(args[0].equalsIgnoreCase("end")) {
if(args.length != 2) {
sender.sendMessage("§4Utilisation : §c/lg end <pseudo>");
return true;
}
Player selected = Bukkit.getPlayer(args[1]);
if(selected == null) {
sender.sendMessage("§4Erreur : §cLe joueur §4"+args[1]+"§c n'est pas connecté.");
return true;
}
LGGame game = LGPlayer.thePlayer(instance, selected).getGame();
if(game == null) {
sender.sendMessage("§4Erreur : §cLe joueur §4"+selected.getName()+"§c n'est pas dans une partie.");
return true;
}
game.cancelWait();
game.endGame(LGWinType.EQUAL);
game.broadcastMessage("§cLa partie a été arrêtée de force !");
return true;
}else if(args[0].equalsIgnoreCase("start")) {
if(args.length < 2) {
sender.sendMessage("§4Utilisation : §c/lg start <pseudo>");
return true;
}
Player player = Bukkit.getPlayer(args[1]);
if(player == null) {
sender.sendMessage("§4Erreur : §cLe joueur §4"+args[1]+"§c n'existe pas !");
return true;
}
LGPlayer lgp = LGPlayer.thePlayer(instance, player);
if(lgp.getGame() == null) {
sender.sendMessage("§4Erreur : §cLe joueur §4"+lgp.getName()+"§c n'est pas dans une partie.");
return true;
}
if(MainLg.getInstance().getConfig().getList("spawns").size() < lgp.getGame().getMaxPlayers()) {
sender.sendMessage("§4Erreur : §cIl n'y a pas assez de points de spawn !");
sender.sendMessage("§8§oPour les définir, merci de faire §7/lg addSpawn");
return true;
}
sender.sendMessage("§aVous avez bien démarré une nouvelle partie !");
lgp.getGame().updateStart();
return true;
}else if(args[0].equalsIgnoreCase("reloadconfig")) {
sender.sendMessage("§aVous avez bien reload la config !");
sender.sendMessage("§7§oSi vous avez changé les rôles, écriver §8§o/lg joinall§7§o !");
loadConfig();
return true;
}else if(args[0].equalsIgnoreCase("joinall")) {
for(Player p : Bukkit.getOnlinePlayers())
Bukkit.getPluginManager().callEvent(new PlayerQuitEvent(p, "joinall"));
for(Player p : Bukkit.getOnlinePlayers())
Bukkit.getPluginManager().callEvent(new PlayerJoinEvent(p, "joinall"));
return true;
}else if(args[0].equalsIgnoreCase("reloadPacks")) {
for(Player p : Bukkit.getOnlinePlayers())
Bukkit.getPluginManager().callEvent(new PlayerQuitEvent(p, "reloadPacks"));
for(Player p : Bukkit.getOnlinePlayers())
Bukkit.getPluginManager().callEvent(new PlayerJoinEvent(p, "reloadPacks"));
return true;
}else if(args[0].equalsIgnoreCase("nextNight")) {
sender.sendMessage("§aVous êtes passé à la prochaine nuit");
if(getCurrentGame() != null) {
getCurrentGame().broadcastMessage("§2§lLe passage à la prochaine nuit a été forcé !");
for(LGPlayer lgp : getCurrentGame().getInGame())
lgp.stopChoosing();
getCurrentGame().cancelWait();
getCurrentGame().nextNight();
}
return true;
}else if(args[0].equalsIgnoreCase("nextDay")) {
sender.sendMessage("§aVous êtes passé à la prochaine journée");
if(getCurrentGame() != null) {
getCurrentGame().broadcastMessage("§2§lLe passage à la prochaine journée a été forcé !");
getCurrentGame().cancelWait();
for(LGPlayer lgp : getCurrentGame().getInGame())
lgp.stopChoosing();
getCurrentGame().endNight();
}
return true;
}else if(args[0].equalsIgnoreCase("roles")) {
if(args.length == 1 || args[1].equalsIgnoreCase("list")) {
sender.sendMessage(prefix+"§6Voici la liste des rôles:");
int index = 0;
for(String role : getRoles().keySet())
sender.sendMessage(prefix+" §e- "+index+++" - §6"+role+" §e> "+MainLg.getInstance().getConfig().getInt("role."+role));
sender.sendMessage("\n"+prefix+" §7Écrivez §8§o/lg roles set <role_id/role_name> <nombre>§7 pour définir le nombre de joueurs qui devrons avoir ce rôle.");
} else {
if(args[1].equalsIgnoreCase("set") && args.length == 4) {
String role = null;
if(args[2].length() <= 2)
try {
int i = Integer.parseInt(args[2]);
Object[] array = getRoles().keySet().toArray();
if(array.length <= i) {
sender.sendMessage(prefix+"§4Erreur: §cCe rôle n'existe pas.");
return true;
}else
role = (String)array[i];
}catch(Exception err) {sender.sendMessage(prefix+"§4Erreur: §cCeci n'est pas un nombre");}
else
role = args[2];
if(role != null) { if (real_role != null) {
String real_role = null; try {
for(String real : getRoles().keySet()) MainLg.getInstance().getConfig().set("role." + real_role, Integer.valueOf(args[3]));
if(real.equalsIgnoreCase(role)) { sender.sendMessage(prefix + "§6Il y aura §e" + args[3] + " §6" + real_role);
real_role = real; saveConfig();
break; loadConfig();
} sender.sendMessage("§7§oSi vous avez fini de changer les rôles, écriver §8§o/lg joinall§7§o !");
} catch (Exception err) {
sender.sendMessage(prefix + "§4Erreur: §c" + args[3] + " n'est pas un nombre");
}
return true;
}
}
sender.sendMessage(prefix + "§4Erreur: §cLe rôle que vous avez entré est incorrect");
if(real_role != null) { } else {
try { sender.sendMessage(prefix + "§4Erreur: §cCommande incorrecte.");
MainLg.getInstance().getConfig().set("role."+real_role, Integer.valueOf(args[3])); sender.sendMessage(prefix + "§4Essayez §c/lg roles set <role_id/role_name> <nombre>§4 ou §c/lg roles list");
sender.sendMessage(prefix+"§6Il y aura §e"+args[3]+" §6"+real_role); }
saveConfig(); }
loadConfig(); return true;
sender.sendMessage("§7§oSi vous avez fini de changer les rôles, écriver §8§o/lg joinall§7§o !"); }
}catch(Exception err) { }
sender.sendMessage(prefix+"§4Erreur: §c"+args[3]+" n'est pas un nombre"); sender.sendMessage(prefix + "§4Erreur: §cCommande incorrecte.");
} sender.sendMessage(prefix + "§4Essayez /lg §caddSpawn/end/start/nextNight/nextDay/reloadConfig/roles/reloadPacks/joinAll");
return true; return true;
} }
} return false;
sender.sendMessage(prefix+"§4Erreur: §cLe rôle que vous avez entré est incorrect"); }
} else { @Override
sender.sendMessage(prefix+"§4Erreur: §cCommande incorrecte."); public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
sender.sendMessage(prefix+"§4Essayez §c/lg roles set <role_id/role_name> <nombre>§4 ou §c/lg roles list"); if (!sender.hasPermission("loupgarou.admin"))
} return new ArrayList<>(0);
}
return true;
}
}
sender.sendMessage(prefix+"§4Erreur: §cCommande incorrecte.");
sender.sendMessage(prefix+"§4Essayez /lg §caddSpawn/end/start/nextNight/nextDay/reloadConfig/roles/reloadPacks/joinAll");
return true;
}
return false;
}
@Override
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
if(!sender.hasPermission("loupgarou.admin"))
return new ArrayList<>(0);
if(args.length > 1) { if (args.length > 1) {
if(args[0].equalsIgnoreCase("roles")) if (args[0].equalsIgnoreCase("roles"))
if(args.length == 2) if (args.length == 2)
return getStartingList(args[1], "list", "set"); return getStartingList(args[1], "list", "set");
else if(args.length == 3 && args[1].equalsIgnoreCase("set")) else if (args.length == 3 && args[1].equalsIgnoreCase("set"))
return getStartingList(args[2], getRoles().keySet().toArray(new String[getRoles().size()])); return getStartingList(args[2], getRoles().keySet().toArray(new String[getRoles().size()]));
else if(args.length == 4) else if (args.length == 4)
return Arrays.asList("0", "1", "2", "3", "4", "5", "6", "7", "8", "9"); return Arrays.asList("0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
}else if(args.length == 1) } else if (args.length == 1)
return getStartingList(args[0], "addSpawn", "end", "start", "nextNight", "nextDay", "reloadConfig", "roles", "joinAll", "reloadPacks"); return getStartingList(args[0], "addSpawn", "end", "start", "nextNight", "nextDay", "reloadConfig", "roles", "joinAll", "reloadPacks");
return new ArrayList<>(0); return new ArrayList<>(0);
} }
private List<String> getStartingList(String startsWith, String... list){
startsWith = startsWith.toLowerCase(); private List<String> getStartingList(String startsWith, String... list) {
ArrayList<String> returnlist = new ArrayList<>(); startsWith = startsWith.toLowerCase();
if(startsWith.length() == 0) ArrayList<String> returnlist = new ArrayList<>();
return Arrays.asList(list); if (startsWith.length() == 0)
for(String s : list) return Arrays.asList(list);
if(s.toLowerCase().startsWith(startsWith)) for (String s : list)
returnlist.add(s); if (s.toLowerCase().startsWith(startsWith))
return returnlist; returnlist.add(s);
} return returnlist;
public void loadConfig() { }
int players = 0;
for(String role : roles.keySet()) public void loadConfig() {
players += getConfig().getInt("role."+role); int players = 0;
currentGame = new LGGame(this, players); for (String role : roles.keySet())
} players += getConfig().getInt("role." + role);
@Override currentGame = new LGGame(this, players);
public void onDisable() { }
ProtocolLibrary.getProtocolManager().removePacketListeners(this);
} @Override
public static MainLg getInstance() { public void onDisable() {
return instance; ProtocolLibrary.getProtocolManager().removePacketListeners(this);
} }
private void loadRoles() {
try { private void loadRoles() {
roles.put("LoupGarou", RLoupGarou.class.getConstructor(LGGame.class)); try {
roles.put("LoupGarouNoir", RLoupGarouNoir.class.getConstructor(LGGame.class)); roles.put("LoupGarou", RLoupGarou.class.getConstructor(LGGame.class));
roles.put("Garde", RGarde.class.getConstructor(LGGame.class)); roles.put("LoupGarouNoir", RLoupGarouNoir.class.getConstructor(LGGame.class));
roles.put("Sorciere", RSorciere.class.getConstructor(LGGame.class)); roles.put("Garde", RGarde.class.getConstructor(LGGame.class));
roles.put("Voyante", RVoyante.class.getConstructor(LGGame.class)); roles.put("Sorciere", RSorciere.class.getConstructor(LGGame.class));
roles.put("Chasseur", RChasseur.class.getConstructor(LGGame.class)); roles.put("Voyante", RVoyante.class.getConstructor(LGGame.class));
roles.put("Villageois", RVillageois.class.getConstructor(LGGame.class)); roles.put("Chasseur", RChasseur.class.getConstructor(LGGame.class));
roles.put("Medium", RMedium.class.getConstructor(LGGame.class)); roles.put("Villageois", RVillageois.class.getConstructor(LGGame.class));
roles.put("Dictateur", RDictateur.class.getConstructor(LGGame.class)); roles.put("Medium", RMedium.class.getConstructor(LGGame.class));
roles.put("Cupidon", RCupidon.class.getConstructor(LGGame.class)); roles.put("Dictateur", RDictateur.class.getConstructor(LGGame.class));
roles.put("PetiteFille", RPetiteFille.class.getConstructor(LGGame.class)); roles.put("Cupidon", RCupidon.class.getConstructor(LGGame.class));
roles.put("ChaperonRouge", RChaperonRouge.class.getConstructor(LGGame.class)); roles.put("PetiteFille", RPetiteFille.class.getConstructor(LGGame.class));
roles.put("LoupGarouBlanc", RLoupGarouBlanc.class.getConstructor(LGGame.class)); roles.put("ChaperonRouge", RChaperonRouge.class.getConstructor(LGGame.class));
roles.put("Bouffon", RBouffon.class.getConstructor(LGGame.class)); roles.put("LoupGarouBlanc", RLoupGarouBlanc.class.getConstructor(LGGame.class));
roles.put("Ange", RAnge.class.getConstructor(LGGame.class)); roles.put("Bouffon", RBouffon.class.getConstructor(LGGame.class));
roles.put("Survivant", RSurvivant.class.getConstructor(LGGame.class)); roles.put("Ange", RAnge.class.getConstructor(LGGame.class));
roles.put("Assassin", RAssassin.class.getConstructor(LGGame.class)); roles.put("Survivant", RSurvivant.class.getConstructor(LGGame.class));
roles.put("GrandMechantLoup", RGrandMechantLoup.class.getConstructor(LGGame.class)); roles.put("Assassin", RAssassin.class.getConstructor(LGGame.class));
roles.put("Corbeau", RCorbeau.class.getConstructor(LGGame.class)); roles.put("GrandMechantLoup", RGrandMechantLoup.class.getConstructor(LGGame.class));
roles.put("Detective", RDetective.class.getConstructor(LGGame.class)); roles.put("Corbeau", RCorbeau.class.getConstructor(LGGame.class));
roles.put("ChienLoup", RChienLoup.class.getConstructor(LGGame.class)); roles.put("Detective", RDetective.class.getConstructor(LGGame.class));
roles.put("Pirate", RPirate.class.getConstructor(LGGame.class)); roles.put("ChienLoup", RChienLoup.class.getConstructor(LGGame.class));
roles.put("Pyromane", RPyromane.class.getConstructor(LGGame.class)); roles.put("Pirate", RPirate.class.getConstructor(LGGame.class));
roles.put("Pretre", RPretre.class.getConstructor(LGGame.class)); roles.put("Pyromane", RPyromane.class.getConstructor(LGGame.class));
roles.put("Faucheur", RFaucheur.class.getConstructor(LGGame.class)); roles.put("Pretre", RPretre.class.getConstructor(LGGame.class));
roles.put("EnfantSauvage", REnfantSauvage.class.getConstructor(LGGame.class)); roles.put("Faucheur", RFaucheur.class.getConstructor(LGGame.class));
roles.put("MontreurDOurs", RMontreurDOurs.class.getConstructor(LGGame.class)); roles.put("EnfantSauvage", REnfantSauvage.class.getConstructor(LGGame.class));
roles.put("Vampire", RVampire.class.getConstructor(LGGame.class)); roles.put("MontreurDOurs", RMontreurDOurs.class.getConstructor(LGGame.class));
roles.put("ChasseurDeVampire", RChasseurDeVampire.class.getConstructor(LGGame.class)); roles.put("Vampire", RVampire.class.getConstructor(LGGame.class));
} catch (NoSuchMethodException | SecurityException e) { roles.put("ChasseurDeVampire", RChasseurDeVampire.class.getConstructor(LGGame.class));
e.printStackTrace(); } catch (NoSuchMethodException | SecurityException e) {
} e.printStackTrace();
} }
}
} }

View file

@ -6,9 +6,12 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor @RequiredArgsConstructor
public class IndexedRole { public class IndexedRole {
@Getter private final Role role; @Getter
@Getter private int number = 1; private final Role role;
public void increase() { @Getter
number++; private int number = 1;
}
public void increase() {
number++;
}
} }

File diff suppressed because one or more lines are too long

View file

@ -1,14 +1,14 @@
package fr.leomelki.loupgarou.classes; package fr.leomelki.loupgarou.classes;
import com.comphenix.protocol.wrappers.WrappedSignedProperty; import com.comphenix.protocol.wrappers.WrappedSignedProperty;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor @RequiredArgsConstructor
public enum LGCustomSkin { public enum LGCustomSkin {
VILLAGER(new WrappedSignedProperty("textures", "eyJ0aW1lc3RhbXAiOjE1NzcwNTE5MDIyNDgsInByb2ZpbGVJZCI6Ijc4YWQzMjI2YmJkYTQwMGZiNTExMjAzMDY4MGNjN2I0IiwicHJvZmlsZU5hbWUiOiJTaHl0b29zIiwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzYxZmE3Y2UyYmQxMmJmMzBjOTcxZjUwZjJiMGIyYTZkZWUyOWU4MWM5MmJkZmFhZjFkMDJlNjM5YzJiZjMzNWEiLCJtZXRhZGF0YSI6eyJtb2RlbCI6InNsaW0ifX19fQ==", "Qk3Gh9IbVwqIvzv0t3vNrGhzW1ejvKls/7n1vqC7UozJYFotECsBla3DFrxrLvTVsCMAQ3cXGq9QjfFF1U/q0NYvWNXVPbrIxX6LH2t2SI9F1+WLQ7LGYwwABzMGDClJXkuUr0yEOPtCwoTgvinVkCZmNRrN0VDAwd+ie3LCnuBjo3iabjA4dxXLE59mnvCGKo5pGdqThn/KikUldvYGBjpQa+X5F+jQhj7TucZ8t0VJ2t05TkKHS+bcIcmCD+UorGG1N5uiNkQe89BMXZKQEebydtnH5RT8efqHfYT5aZY/6IJKTMqIeclcWy2f6LIfRb97AeifOPPHTfjl2Q6wjvOdnvGuNa+Xk6biNM7cLz1KQzdMM0CvkiZZ9XtFul5+PXEobx2IjIEcrStZX0fl/NZid+kf+2RXbPKx4Z+07q5PbeCzr1UD3DMWlrEMQQppIB26uhPLS9mh3IvM9bhx+vIbByr1Z5p3aT4J2mbhwwmf/LUpNUyMn6oHt19zX6cEcSbncGBLgEHOrUXgxdK/Sm4lJKA1Mr3M0o8CSt7ldLc6mA4oBPMK/OV/c0rwb1W2GWOUyw99dNT/jFSFXyyjCHW0+5FkAW+H+8Y0dZ3U4UWaAmX4JNfdxiih97eTBKEvIC8V48hiFS/UV9A9LBVPNkca/4lanh/jNZ7VRQ+/vU8=")), VILLAGER(new WrappedSignedProperty("textures", "eyJ0aW1lc3RhbXAiOjE1NzcwNTE5MDIyNDgsInByb2ZpbGVJZCI6Ijc4YWQzMjI2YmJkYTQwMGZiNTExMjAzMDY4MGNjN2I0IiwicHJvZmlsZU5hbWUiOiJTaHl0b29zIiwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzYxZmE3Y2UyYmQxMmJmMzBjOTcxZjUwZjJiMGIyYTZkZWUyOWU4MWM5MmJkZmFhZjFkMDJlNjM5YzJiZjMzNWEiLCJtZXRhZGF0YSI6eyJtb2RlbCI6InNsaW0ifX19fQ==", "Qk3Gh9IbVwqIvzv0t3vNrGhzW1ejvKls/7n1vqC7UozJYFotECsBla3DFrxrLvTVsCMAQ3cXGq9QjfFF1U/q0NYvWNXVPbrIxX6LH2t2SI9F1+WLQ7LGYwwABzMGDClJXkuUr0yEOPtCwoTgvinVkCZmNRrN0VDAwd+ie3LCnuBjo3iabjA4dxXLE59mnvCGKo5pGdqThn/KikUldvYGBjpQa+X5F+jQhj7TucZ8t0VJ2t05TkKHS+bcIcmCD+UorGG1N5uiNkQe89BMXZKQEebydtnH5RT8efqHfYT5aZY/6IJKTMqIeclcWy2f6LIfRb97AeifOPPHTfjl2Q6wjvOdnvGuNa+Xk6biNM7cLz1KQzdMM0CvkiZZ9XtFul5+PXEobx2IjIEcrStZX0fl/NZid+kf+2RXbPKx4Z+07q5PbeCzr1UD3DMWlrEMQQppIB26uhPLS9mh3IvM9bhx+vIbByr1Z5p3aT4J2mbhwwmf/LUpNUyMn6oHt19zX6cEcSbncGBLgEHOrUXgxdK/Sm4lJKA1Mr3M0o8CSt7ldLc6mA4oBPMK/OV/c0rwb1W2GWOUyw99dNT/jFSFXyyjCHW0+5FkAW+H+8Y0dZ3U4UWaAmX4JNfdxiih97eTBKEvIC8V48hiFS/UV9A9LBVPNkca/4lanh/jNZ7VRQ+/vU8=")),
MAYOR(new WrappedSignedProperty("textures", "eyJ0aW1lc3RhbXAiOjE1NzcwNTE4NjcxMDcsInByb2ZpbGVJZCI6Ijc4YWQzMjI2YmJkYTQwMGZiNTExMjAzMDY4MGNjN2I0IiwicHJvZmlsZU5hbWUiOiJTaHl0b29zIiwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzUzYTk5NjljMjU0YWRkYmZkNjdmNDJlZmMxODNkZDg5ZWE3ZTliOGE4NDY2YWNkOWZhMWZmMTYzMTQ0MTczMDMifX19", "fq/bN78Y70k2clbfg6sLRuj4mhvDTz58fKI3/0XvzJH/bQF5Mf+jcFwpXJN+ZiupMaHFHI1bBQ20lrzlGvtrCoYu9+Bx4otin0NQVxc3pOEewikzYub64niMPq8irGJrS2pB1B2Uym5F+/wX8TXOkySyAo1r3lzh6qmfe1bpNG7gcc9+ulYdAbnyhxTko3d8poBsjLnadpo0/rBNMkNIua9ryIE3WHW+DOxLwpLpd3TAB15RnA3/qvyBlqQBny1M24ccjmzxjiUbzF66EtTC+BRs3eS8or/vxvdmi70e295gMoERZJ5pFukxe9LB0IEg9cLHwuEl7OC8FcuLUQFnm1EVPjfSlSF36Sd+iVwjFE/x1zINKYsDHwF/TM+yAWOv+PwgGxgQj1C97VaWEkrHXDMEzgxi8DAcPbDBwcyBZXRgOJTHRSH2ATvGDqeT7iQbPrP+y0YNFUDXyBrKYgscgA7bMtBgWvW75SdvcIhqQEVe/jMivMWDuvwhQF4lUGonHc0B5wi1216fqTypEcOeaa5ab+siNssFXpEsaFP9l+1o6uYjNbBpptEAsIlKbnjDaVSkCTvsW7ICaPAZcZCavpyST5MYTv6C7n/bwl3nfzzI7U1LYvYi/gMEHKWfNwLs4T+4VQ3xZD0DpkEQgDrax+Wt182K6OvrAcOcCAfWySo=\",\"name")), MAYOR(new WrappedSignedProperty("textures", "eyJ0aW1lc3RhbXAiOjE1NzcwNTE4NjcxMDcsInByb2ZpbGVJZCI6Ijc4YWQzMjI2YmJkYTQwMGZiNTExMjAzMDY4MGNjN2I0IiwicHJvZmlsZU5hbWUiOiJTaHl0b29zIiwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzUzYTk5NjljMjU0YWRkYmZkNjdmNDJlZmMxODNkZDg5ZWE3ZTliOGE4NDY2YWNkOWZhMWZmMTYzMTQ0MTczMDMifX19", "fq/bN78Y70k2clbfg6sLRuj4mhvDTz58fKI3/0XvzJH/bQF5Mf+jcFwpXJN+ZiupMaHFHI1bBQ20lrzlGvtrCoYu9+Bx4otin0NQVxc3pOEewikzYub64niMPq8irGJrS2pB1B2Uym5F+/wX8TXOkySyAo1r3lzh6qmfe1bpNG7gcc9+ulYdAbnyhxTko3d8poBsjLnadpo0/rBNMkNIua9ryIE3WHW+DOxLwpLpd3TAB15RnA3/qvyBlqQBny1M24ccjmzxjiUbzF66EtTC+BRs3eS8or/vxvdmi70e295gMoERZJ5pFukxe9LB0IEg9cLHwuEl7OC8FcuLUQFnm1EVPjfSlSF36Sd+iVwjFE/x1zINKYsDHwF/TM+yAWOv+PwgGxgQj1C97VaWEkrHXDMEzgxi8DAcPbDBwcyBZXRgOJTHRSH2ATvGDqeT7iQbPrP+y0YNFUDXyBrKYgscgA7bMtBgWvW75SdvcIhqQEVe/jMivMWDuvwhQF4lUGonHc0B5wi1216fqTypEcOeaa5ab+siNssFXpEsaFP9l+1o6uYjNbBpptEAsIlKbnjDaVSkCTvsW7ICaPAZcZCavpyST5MYTv6C7n/bwl3nfzzI7U1LYvYi/gMEHKWfNwLs4T+4VQ3xZD0DpkEQgDrax+Wt182K6OvrAcOcCAfWySo=\",\"name")),
WEREWOLF(new WrappedSignedProperty("textures", "eyJ0aW1lc3RhbXAiOjE1NzcwNTE3NTU1NDgsInByb2ZpbGVJZCI6Ijc4YWQzMjI2YmJkYTQwMGZiNTExMjAzMDY4MGNjN2I0IiwicHJvZmlsZU5hbWUiOiJTaHl0b29zIiwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2U1NGE2MmRhNGMzZTI5YjdiZWM4ZTI0YzhiNTAyZGZjNWNmMTNmYjc0NjFhN2I5YWY2NGY2Yjc1ZGFhNmE2MDUifX19", "k0cT/rDkBW3QMqSavKc0Nbu39ft3i0TLLhxLht7LKKuA+Q+amCmzw/NZjZRtJc/R87uyl2B+JHLTWTOcbDQX2bE7fIzEvYFhvbb2dasxeYA03wBwZ+OuJlhhxWSSX2NoAI6gEGcWQ3k4xcf+xhtD+5eddjL5k+Dv/kVW6qCWprfPSmd4+KQ0aVwyBkbheyTBSaamtpPj24UYM1EL9POF/PrbmiipfSthp7DkwL4PprW+0Z3pzFMgY46Ay2VJYxa+Q6q3IlYqSXMkjJccf3msyOTGe3JSiQc1Du/djffvLIoyjybolNb5rQ/OrnYIEtnqCuXstJJd3J+a6F8w4DkS2ZMVY4lvidb4coVeFmm9Nk/afqqyG99TDmvZNFWFSeaaxGSWeZPkneAEFuFQXn76sl1xdtXkgXmP8H0yvs9SwA9UnGoldIay6D1HzAOGo3n3stV6188K0ucey1KsH6nNlZfT2hnqvI1lfKD67oQNFfl4kDLRwArfZJUmcQOJh9/fk6/bJvgYuElEkGy++0FkuKKkRJHPIW5+kPZguNo96cAAGxhSH3IIscLoxDdn53iSnngpKttWfG6ccI/XMGTWp4wCq6IC2IBZcmKEqK+fN5dVbR4tn79pXlQ2Yyk7kvXaZjdVHrKC1Buw1gjjC1EvmiJjTRZVHPYlCTkfy+hdqzE=")); WEREWOLF(new WrappedSignedProperty("textures", "eyJ0aW1lc3RhbXAiOjE1NzcwNTE3NTU1NDgsInByb2ZpbGVJZCI6Ijc4YWQzMjI2YmJkYTQwMGZiNTExMjAzMDY4MGNjN2I0IiwicHJvZmlsZU5hbWUiOiJTaHl0b29zIiwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2U1NGE2MmRhNGMzZTI5YjdiZWM4ZTI0YzhiNTAyZGZjNWNmMTNmYjc0NjFhN2I5YWY2NGY2Yjc1ZGFhNmE2MDUifX19", "k0cT/rDkBW3QMqSavKc0Nbu39ft3i0TLLhxLht7LKKuA+Q+amCmzw/NZjZRtJc/R87uyl2B+JHLTWTOcbDQX2bE7fIzEvYFhvbb2dasxeYA03wBwZ+OuJlhhxWSSX2NoAI6gEGcWQ3k4xcf+xhtD+5eddjL5k+Dv/kVW6qCWprfPSmd4+KQ0aVwyBkbheyTBSaamtpPj24UYM1EL9POF/PrbmiipfSthp7DkwL4PprW+0Z3pzFMgY46Ay2VJYxa+Q6q3IlYqSXMkjJccf3msyOTGe3JSiQc1Du/djffvLIoyjybolNb5rQ/OrnYIEtnqCuXstJJd3J+a6F8w4DkS2ZMVY4lvidb4coVeFmm9Nk/afqqyG99TDmvZNFWFSeaaxGSWeZPkneAEFuFQXn76sl1xdtXkgXmP8H0yvs9SwA9UnGoldIay6D1HzAOGo3n3stV6188K0ucey1KsH6nNlZfT2hnqvI1lfKD67oQNFfl4kDLRwArfZJUmcQOJh9/fk6/bJvgYuElEkGy++0FkuKKkRJHPIW5+kPZguNo96cAAGxhSH3IIscLoxDdn53iSnngpKttWfG6ccI/XMGTWp4wCq6IC2IBZcmKEqK+fN5dVbR4tn79pXlQ2Yyk7kvXaZjdVHrKC1Buw1gjjC1EvmiJjTRZVHPYlCTkfy+hdqzE="));
@Getter private final WrappedSignedProperty property; @Getter
private final WrappedSignedProperty property;
} }

File diff suppressed because it is too large Load diff

View file

@ -1,22 +1,11 @@
package fr.leomelki.loupgarou.classes; package fr.leomelki.loupgarou.classes;
import java.util.*;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.scheduler.BukkitRunnable;
import com.comphenix.protocol.wrappers.EnumWrappers.NativeGameMode; import com.comphenix.protocol.wrappers.EnumWrappers.NativeGameMode;
import com.comphenix.protocol.wrappers.EnumWrappers.PlayerInfoAction; import com.comphenix.protocol.wrappers.EnumWrappers.PlayerInfoAction;
import com.comphenix.protocol.wrappers.EnumWrappers.TitleAction; import com.comphenix.protocol.wrappers.EnumWrappers.TitleAction;
import com.comphenix.protocol.wrappers.PlayerInfoData; import com.comphenix.protocol.wrappers.PlayerInfoData;
import com.comphenix.protocol.wrappers.WrappedChatComponent; import com.comphenix.protocol.wrappers.WrappedChatComponent;
import com.comphenix.protocol.wrappers.WrappedGameProfile; import com.comphenix.protocol.wrappers.WrappedGameProfile;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerChat; import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerChat;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerPlayerInfo; import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerPlayerInfo;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerScoreboardTeam; import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerScoreboardTeam;
@ -37,336 +26,373 @@ import net.minecraft.server.v1_15_R1.DimensionManager;
import net.minecraft.server.v1_15_R1.EnumGamemode; import net.minecraft.server.v1_15_R1.EnumGamemode;
import net.minecraft.server.v1_15_R1.PacketPlayOutRespawn; import net.minecraft.server.v1_15_R1.PacketPlayOutRespawn;
import net.minecraft.server.v1_15_R1.WorldType; import net.minecraft.server.v1_15_R1.WorldType;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.*;
public class LGPlayer { public class LGPlayer {
private static final HashMap<Player, LGPlayer> cachedPlayers = new HashMap<>(); private static final HashMap<Player, LGPlayer> cachedPlayers = new HashMap<>();
private final MainLg plugin; private final MainLg plugin;
@Getter
private final VariableCache cache = new VariableCache();
public boolean canSelectDead;
@Getter
boolean muted;
long lastChoose;
@Getter
@Setter
private int place;
@Getter
private Player player;
@Getter
@Setter
private boolean dead;
@Setter
@Getter
private Role role;
private LGChooseCallback chooseCallback;
private List<LGPlayer> blacklistedChoice = new ArrayList<>(0);
@Getter
@Setter
private LGGame game;
@Getter
@Setter
private String latestObjective;
@Getter
private CustomScoreboard scoreboard;
private String name;
@Getter
private LGChat chat;
public static LGPlayer thePlayer(MainLg plugin, Player player) { public LGPlayer(MainLg mainLg, Player player) {
LGPlayer lgp = cachedPlayers.get(player); this.plugin = mainLg;
if(lgp == null) { this.player = player;
lgp = new LGPlayer(plugin, player); }
cachedPlayers.put(player, lgp);
}
return lgp;
}
public static LGPlayer removePlayer(Player player) {
return cachedPlayers.remove(player);//.remove();
}
@Getter @Setter private int place;
@Getter private Player player;
@Getter @Setter private boolean dead;
@Setter @Getter private Role role;
private LGChooseCallback chooseCallback;
private List<LGPlayer> blacklistedChoice = new ArrayList<>(0);
@Getter private final VariableCache cache = new VariableCache();
@Getter @Setter private LGGame game;
@Getter @Setter private String latestObjective;
@Getter private CustomScoreboard scoreboard;
public LGPlayer(MainLg mainLg, Player player) {
this.plugin = mainLg;
this.player = player;
}
public LGPlayer(MainLg mainLg, String name) {
this.plugin = mainLg;
this.name = name;
}
public void setScoreboard(CustomScoreboard scoreboard) { public LGPlayer(MainLg mainLg, String name) {
if(player != null) { this.plugin = mainLg;
if(this.scoreboard != null) this.name = name;
this.scoreboard.hide(); }
this.scoreboard = scoreboard; public static LGPlayer thePlayer(MainLg plugin, Player player) {
LGPlayer lgp = cachedPlayers.get(player);
if (lgp == null) {
lgp = new LGPlayer(plugin, player);
cachedPlayers.put(player, lgp);
}
return lgp;
}
if(scoreboard != null) public static LGPlayer removePlayer(Player player) {
scoreboard.show(); return cachedPlayers.remove(player);//.remove();
} }
}
public void sendActionBarMessage(String msg) { public void setScoreboard(CustomScoreboard scoreboard) {
if(this.player != null) { if (player != null) {
WrapperPlayServerChat chat = new WrapperPlayServerChat(); if (this.scoreboard != null)
chat.setPosition((byte)2); this.scoreboard.hide();
chat.setMessage(WrappedChatComponent.fromText(msg));
chat.sendPacket(getPlayer());
}
}
public void sendMessage(String msg) {
if(this.player != null)
getPlayer().sendMessage(MainLg.getPrefix()+msg);
}
public void sendTitle(String title, String subTitle, int stay) {
if(this.player != null) {
WrapperPlayServerTitle titlePacket = new WrapperPlayServerTitle();
titlePacket.setAction(TitleAction.TIMES);
titlePacket.setFadeIn(10);
titlePacket.setStay(stay);
titlePacket.setFadeOut(10);
titlePacket.sendPacket(player);
titlePacket = new WrapperPlayServerTitle(); this.scoreboard = scoreboard;
titlePacket.setAction(TitleAction.TITLE);
titlePacket.setTitle(WrappedChatComponent.fromText(title));
titlePacket.sendPacket(player);
titlePacket = new WrapperPlayServerTitle(); if (scoreboard != null)
titlePacket.setAction(TitleAction.SUBTITLE); scoreboard.show();
titlePacket.setTitle(WrappedChatComponent.fromText(subTitle)); }
titlePacket.sendPacket(player); }
}
} public void sendActionBarMessage(String msg) {
public void remove() { if (this.player != null) {
this.player = null; WrapperPlayServerChat chat = new WrapperPlayServerChat();
} chat.setPosition((byte) 2);
private String name; chat.setMessage(WrappedChatComponent.fromText(msg));
public String getName() { chat.sendPacket(getPlayer());
return player != null ? getPlayer().getName() : name; }
} }
public void sendMessage(String msg) {
if (this.player != null)
getPlayer().sendMessage(MainLg.getPrefix() + msg);
}
public void sendTitle(String title, String subTitle, int stay) {
if (this.player != null) {
WrapperPlayServerTitle titlePacket = new WrapperPlayServerTitle();
titlePacket.setAction(TitleAction.TIMES);
titlePacket.setFadeIn(10);
titlePacket.setStay(stay);
titlePacket.setFadeOut(10);
titlePacket.sendPacket(player);
titlePacket = new WrapperPlayServerTitle();
titlePacket.setAction(TitleAction.TITLE);
titlePacket.setTitle(WrappedChatComponent.fromText(title));
titlePacket.sendPacket(player);
titlePacket = new WrapperPlayServerTitle();
titlePacket.setAction(TitleAction.SUBTITLE);
titlePacket.setTitle(WrappedChatComponent.fromText(subTitle));
titlePacket.sendPacket(player);
}
}
public void remove() {
this.player = null;
}
public String getName() {
return player != null ? getPlayer().getName() : name;
}
public boolean join(LGGame game) {
if (getPlayer().getGameMode() == GameMode.SPECTATOR) {
sendMessage("§cÉtant en mode spectateur, vous ne rejoignez pas la partie !");
return false;
}
if (game.tryToJoin(this)) {
//To update the skin
updateOwnSkin();
getPlayer().setWalkSpeed(0.2f);
// sendMessage("§2Vous venez de rejoindre une partie de Loup-Garou. §aBon jeu!");
return true;
}
return false;
}
public void choose(LGChooseCallback callback, LGPlayer... blacklisted) {
this.blacklistedChoice = blacklisted == null ? new ArrayList<>(0) : Arrays.asList(blacklisted);
this.chooseCallback = callback;
//sendMessage("§7§oTIP: Regardez un joueur et tapez le afin de le sélectionner.");
}
public void stopChoosing() {
this.blacklistedChoice = null;
this.chooseCallback = null;
}
public void showView() {
if (getGame() != null && player != null)
for (LGPlayer lgp : getGame().getAlive())
if (!lgp.isDead()) {
if (lgp != this && lgp.getPlayer() != null)
getPlayer().showPlayer(plugin, lgp.getPlayer());
else {
WrapperPlayServerScoreboardTeam team = new WrapperPlayServerScoreboardTeam();
team.setMode(2);
team.setName(lgp.getName());
team.setPrefix(WrappedChatComponent.fromText(""));
team.setPlayers(Collections.singletonList(lgp.getName()));
team.sendPacket(getPlayer());
WrapperPlayServerPlayerInfo info = new WrapperPlayServerPlayerInfo();
ArrayList<PlayerInfoData> infos = new ArrayList<>();
info.setAction(PlayerInfoAction.ADD_PLAYER);
infos.add(new PlayerInfoData(new WrappedGameProfile(getPlayer().getUniqueId(), getName()), 0, NativeGameMode.ADVENTURE, WrappedChatComponent.fromText(getName())));
info.setData(infos);
info.sendPacket(getPlayer());
}
}
getPlayer().removePotionEffect(PotionEffectType.BLINDNESS);
getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 20, 2, false, false));
}
//TODO Update prefix for only one guy
public void updatePrefix() {
if (getGame() != null && !isDead() && player != null) {
List<String> meList = Collections.singletonList(getName());
for (LGPlayer lgp : getGame().getInGame()) {
WrapperPlayServerPlayerInfo info = new WrapperPlayServerPlayerInfo();
ArrayList<PlayerInfoData> infos = new ArrayList<>();
info.setAction(PlayerInfoAction.ADD_PLAYER);
infos.add(new PlayerInfoData(new WrappedGameProfile(getPlayer().getUniqueId(), getName()), 0, NativeGameMode.ADVENTURE, WrappedChatComponent.fromText(getName())));
info.setData(infos);
info.sendPacket(lgp.getPlayer());
WrapperPlayServerScoreboardTeam team = new WrapperPlayServerScoreboardTeam();
team.setMode(2);
team.setName(getName());
team.setPrefix(WrappedChatComponent.fromText(""));
team.setPlayers(meList);
team.sendPacket(lgp.getPlayer());
}
}
}
public void hideView() {
if (getGame() != null && player != null) {
WrapperPlayServerPlayerInfo info = new WrapperPlayServerPlayerInfo();
ArrayList<PlayerInfoData> infos = new ArrayList<>();
info.setAction(PlayerInfoAction.ADD_PLAYER);
for (LGPlayer lgp : getGame().getAlive())
if (lgp != this && lgp.getPlayer() != null) {
if (!lgp.isDead())
infos.add(new PlayerInfoData(new WrappedGameProfile(lgp.getPlayer().getUniqueId(), lgp.getName()), 0, NativeGameMode.ADVENTURE, WrappedChatComponent.fromText(lgp.getName())));
getPlayer().hidePlayer(plugin, lgp.getPlayer());
}
info.setData(infos);
info.sendPacket(getPlayer());
}
getPlayer().removePotionEffect(PotionEffectType.BLINDNESS);
getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 999999, 1, false, false));
}
public void updateSkin() {
if (getGame() != null && player != null) {
for (LGPlayer lgp : getGame().getInGame()) {
if (lgp == this) {
WrapperPlayServerPlayerInfo info = new WrapperPlayServerPlayerInfo();
ArrayList<PlayerInfoData> infos = new ArrayList<>();
info.setAction(PlayerInfoAction.ADD_PLAYER);
infos.add(new PlayerInfoData(new WrappedGameProfile(getPlayer().getUniqueId(), getName()), 0, NativeGameMode.ADVENTURE, WrappedChatComponent.fromText(getName())));
info.setData(infos);
info.sendPacket(getPlayer());
} else if (!isDead() && lgp.getPlayer() != null) {
lgp.getPlayer().hidePlayer(plugin, getPlayer());
lgp.getPlayer().showPlayer(plugin, getPlayer());
}
}
}
}
public void updateOwnSkin() {
if (player != null) {
//On change son skin avec un packet de PlayerInfo (dans le tab)
WrapperPlayServerPlayerInfo infos = new WrapperPlayServerPlayerInfo();
infos.setAction(PlayerInfoAction.ADD_PLAYER);
WrappedGameProfile gameProfile = new WrappedGameProfile(getPlayer().getUniqueId(), getPlayer().getName());
infos.setData(Collections.singletonList(new PlayerInfoData(gameProfile, 10, NativeGameMode.SURVIVAL, WrappedChatComponent.fromText(getPlayer().getName()))));
infos.sendPacket(getPlayer());
//Pour qu'il voit son skin changer (sa main et en f5), on lui dit qu'il respawn (alors qu'il n'est pas mort mais ça marche quand même mdr)
PacketPlayOutRespawn respawn = new PacketPlayOutRespawn(DimensionManager.OVERWORLD, 0, WorldType.NORMAL, EnumGamemode.ADVENTURE);
((CraftPlayer) getPlayer()).getHandle().playerConnection.sendPacket(respawn);
//Enfin, on le téléporte à sa potion actuelle car sinon il se verra dans le vide
getPlayer().teleport(getPlayer().getLocation());
float speed = getPlayer().getWalkSpeed();
getPlayer().setWalkSpeed(0.2f);
new BukkitRunnable() {
@Override
public void run() {
getPlayer().updateInventory();
getPlayer().setWalkSpeed(speed);
}
}.runTaskLater(MainLg.getInstance(), 5);
//Et c'est bon, le joueur se voit avec un nouveau skin avec quasiment aucun problème visible à l'écran :D
}
}
public LGPlayer getPlayerOnCursor(List<LGPlayer> list) {
Location loc = getPlayer().getLocation();
if (loc.getPitch() > 60)
if (blacklistedChoice.contains(this))
return null;
else
return this;
for (int i = 0; i < 50; i++) {
loc.add(loc.getDirection());
for (LGPlayer player : list) {
if (player != this && !blacklistedChoice.contains(player) && (!player.isDead() || canSelectDead) && VariousUtils.distanceSquaredXZ(loc, player.getPlayer().getLocation()) < 0.35 && Math.abs(loc.getY() - player.getPlayer().getLocation().getY()) < 2) {
return player;
}
}
}
return null;
}
public RoleType getRoleType() {
return this.getCache().getBoolean("vampire") ? RoleType.VAMPIRE : this.getCache().getBoolean("infected") ? RoleType.LOUP_GAROU : getRole().getType(this);
}
public RoleWinType getRoleWinType() {
return this.getCache().getBoolean("vampire") ? RoleWinType.VAMPIRE : this.getCache().getBoolean("infected") ? RoleWinType.LOUP_GAROU : getRole().getWinType(this);
}
public boolean isRoleActive() {
return !this.getCache().getBoolean("vampire");
}
public void die() {
setMuted();
}
private void setMuted() {
if (player != null)
for (LGPlayer lgp : getGame().getInGame())
if (lgp != this && lgp.getPlayer() != null)
lgp.getPlayer().hidePlayer(plugin, getPlayer());
muted = true;
}
public void resetMuted() {
muted = false;
}
public void joinChat(LGChat chat, LGChatCallback callback) {
joinChat(chat, callback, false);
}
public void joinChat(LGChat chat) {
joinChat(chat, null, false);
}
public void joinChat(LGChat chat, boolean muted) {
joinChat(chat, null, muted);
}
public void joinChat(LGChat chat, LGChatCallback callback, boolean muted) {
if (this.chat != null && !muted)
this.chat.leave(this);
if (!muted)
this.chat = chat;
if (chat != null && player != null)
chat.join(this, callback == null ? chat.getDefaultCallback() : callback);
}
public boolean join(LGGame game) { public void leaveChat() {
if(getPlayer().getGameMode() == GameMode.SPECTATOR) { joinChat(new LGNoChat(), null);
sendMessage("§cÉtant en mode spectateur, vous ne rejoignez pas la partie !"); }
return false;
}
if(game.tryToJoin(this)) {
//To update the skin
updateOwnSkin();
getPlayer().setWalkSpeed(0.2f);
// sendMessage("§2Vous venez de rejoindre une partie de Loup-Garou. §aBon jeu!");
return true;
}
return false;
}
public void choose(LGChooseCallback callback, LGPlayer... blacklisted) {
this.blacklistedChoice = blacklisted == null ? new ArrayList<>(0) : Arrays.asList(blacklisted);
this.chooseCallback = callback;
//sendMessage("§7§oTIP: Regardez un joueur et tapez le afin de le sélectionner.");
}
public void stopChoosing() {
this.blacklistedChoice = null;
this.chooseCallback = null;
}
public interface LGChooseCallback{ public void onChat(String message) {
void callback(LGPlayer choosen); if (chat != null) {
} chat.sendMessage(this, message);
}
public void showView() { }
if(getGame() != null && player != null)
for(LGPlayer lgp : getGame().getAlive())
if(!lgp.isDead()) {
if(lgp != this && lgp.getPlayer() != null)
getPlayer().showPlayer(plugin, lgp.getPlayer());
else{
WrapperPlayServerScoreboardTeam team = new WrapperPlayServerScoreboardTeam();
team.setMode(2);
team.setName(lgp.getName());
team.setPrefix(WrappedChatComponent.fromText(""));
team.setPlayers(Collections.singletonList(lgp.getName()));
team.sendPacket(getPlayer());
WrapperPlayServerPlayerInfo info = new WrapperPlayServerPlayerInfo();
ArrayList<PlayerInfoData> infos = new ArrayList<>();
info.setAction(PlayerInfoAction.ADD_PLAYER);
infos.add(new PlayerInfoData(new WrappedGameProfile(getPlayer().getUniqueId(), getName()), 0, NativeGameMode.ADVENTURE, WrappedChatComponent.fromText(getName())));
info.setData(infos);
info.sendPacket(getPlayer());
}
}
getPlayer().removePotionEffect(PotionEffectType.BLINDNESS);
getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 20, 2, false, false));
}
//TODO Update prefix for only one guy
public void updatePrefix() {
if(getGame() != null && !isDead() && player != null) {
List<String> meList = Collections.singletonList(getName());
for(LGPlayer lgp : getGame().getInGame()) {
WrapperPlayServerPlayerInfo info = new WrapperPlayServerPlayerInfo();
ArrayList<PlayerInfoData> infos = new ArrayList<>();
info.setAction(PlayerInfoAction.ADD_PLAYER);
infos.add(new PlayerInfoData(new WrappedGameProfile(getPlayer().getUniqueId(), getName()), 0, NativeGameMode.ADVENTURE, WrappedChatComponent.fromText(getName())));
info.setData(infos);
info.sendPacket(lgp.getPlayer());
WrapperPlayServerScoreboardTeam team = new WrapperPlayServerScoreboardTeam();
team.setMode(2);
team.setName(getName());
team.setPrefix(WrappedChatComponent.fromText(""));
team.setPlayers(meList);
team.sendPacket(lgp.getPlayer());
}
}
}
public void hideView() {
if(getGame() != null && player != null) {
WrapperPlayServerPlayerInfo info = new WrapperPlayServerPlayerInfo();
ArrayList<PlayerInfoData> infos = new ArrayList<>();
info.setAction(PlayerInfoAction.ADD_PLAYER);
for(LGPlayer lgp : getGame().getAlive())
if(lgp != this && lgp.getPlayer() != null) {
if(!lgp.isDead())
infos.add(new PlayerInfoData(new WrappedGameProfile(lgp.getPlayer().getUniqueId(), lgp.getName()), 0, NativeGameMode.ADVENTURE, WrappedChatComponent.fromText(lgp.getName())));
getPlayer().hidePlayer(plugin, lgp.getPlayer());
}
info.setData(infos);
info.sendPacket(getPlayer());
}
getPlayer().removePotionEffect(PotionEffectType.BLINDNESS);
getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 999999, 1, false, false));
}
public void updateSkin() {
if(getGame() != null && player != null) {
for(LGPlayer lgp : getGame().getInGame()) {
if(lgp == this) {
WrapperPlayServerPlayerInfo info = new WrapperPlayServerPlayerInfo();
ArrayList<PlayerInfoData> infos = new ArrayList<>();
info.setAction(PlayerInfoAction.ADD_PLAYER);
infos.add(new PlayerInfoData(new WrappedGameProfile(getPlayer().getUniqueId(), getName()), 0, NativeGameMode.ADVENTURE, WrappedChatComponent.fromText(getName())));
info.setData(infos);
info.sendPacket(getPlayer());
}else if(!isDead() && lgp.getPlayer() != null){
lgp.getPlayer().hidePlayer(plugin, getPlayer());
lgp.getPlayer().showPlayer(plugin, getPlayer());
}
}
}
}
public void updateOwnSkin() {
if(player != null) {
//On change son skin avec un packet de PlayerInfo (dans le tab)
WrapperPlayServerPlayerInfo infos = new WrapperPlayServerPlayerInfo();
infos.setAction(PlayerInfoAction.ADD_PLAYER);
WrappedGameProfile gameProfile = new WrappedGameProfile(getPlayer().getUniqueId(), getPlayer().getName());
infos.setData(Collections.singletonList(new PlayerInfoData(gameProfile, 10, NativeGameMode.SURVIVAL, WrappedChatComponent.fromText(getPlayer().getName()))));
infos.sendPacket(getPlayer());
//Pour qu'il voit son skin changer (sa main et en f5), on lui dit qu'il respawn (alors qu'il n'est pas mort mais ça marche quand même mdr)
PacketPlayOutRespawn respawn = new PacketPlayOutRespawn(DimensionManager.OVERWORLD, 0, WorldType.NORMAL, EnumGamemode.ADVENTURE);
((CraftPlayer)getPlayer()).getHandle().playerConnection.sendPacket(respawn);
//Enfin, on le téléporte à sa potion actuelle car sinon il se verra dans le vide
getPlayer().teleport(getPlayer().getLocation());
float speed = getPlayer().getWalkSpeed();
getPlayer().setWalkSpeed(0.2f);
new BukkitRunnable() {
@Override
public void run() {
getPlayer().updateInventory();
getPlayer().setWalkSpeed(speed);
}
}.runTaskLater(MainLg.getInstance(), 5);
//Et c'est bon, le joueur se voit avec un nouveau skin avec quasiment aucun problème visible à l'écran :D
}
}
public boolean canSelectDead;
public LGPlayer getPlayerOnCursor(List<LGPlayer> list) {
Location loc = getPlayer().getLocation();
if(loc.getPitch() > 60)
if(blacklistedChoice.contains(this))
return null;
else
return this;
for(int i = 0;i<50;i++) {
loc.add(loc.getDirection());
for(LGPlayer player : list) {
if(player != this && !blacklistedChoice.contains(player) && (!player.isDead() || canSelectDead) && VariousUtils.distanceSquaredXZ(loc, player.getPlayer().getLocation()) < 0.35 && Math.abs(loc.getY()-player.getPlayer().getLocation().getY()) < 2) {
return player;
}
}
}
return null;
}
public RoleType getRoleType() {
return this.getCache().getBoolean("vampire") ? RoleType.VAMPIRE : this.getCache().getBoolean("infected") ? RoleType.LOUP_GAROU : getRole().getType(this);
}
public RoleWinType getRoleWinType() {
return this.getCache().getBoolean("vampire") ? RoleWinType.VAMPIRE : this.getCache().getBoolean("infected") ? RoleWinType.LOUP_GAROU : getRole().getWinType(this);
}
public boolean isRoleActive() {
return !this.getCache().getBoolean("vampire");
}
@Getter
boolean muted;
public void die() {
setMuted();
}
private void setMuted() { public void playAudio(LGSound sound, double volume) {
if(player != null) if (player != null)
for(LGPlayer lgp : getGame().getInGame()) getPlayer().playSound(getPlayer().getLocation(), sound.getSound(), (float) volume, 1);
if(lgp != this && lgp.getPlayer() != null) }
lgp.getPlayer().hidePlayer(plugin, getPlayer());
muted = true;
}
public void resetMuted() {
muted = false;
}
@Getter private LGChat chat; public void stopAudio(LGSound sound) {
if (player != null)
getPlayer().stopSound(sound.getSound());
}
public void joinChat(LGChat chat, LGChatCallback callback) { public void chooseAction() {
joinChat(chat, callback, false); long now = System.currentTimeMillis();
} if (lastChoose + 200 < now) {
public void joinChat(LGChat chat) { if (chooseCallback != null)
joinChat(chat, null, false); chooseCallback.callback(getPlayerOnCursor(getGame().getInGame()));
} lastChoose = now;
public void joinChat(LGChat chat, boolean muted) { }
joinChat(chat, null, muted); }
}
public void joinChat(LGChat chat, LGChatCallback callback, boolean muted) {
if(this.chat != null && !muted)
this.chat.leave(this);
if(!muted) @Override
this.chat = chat; public String toString() {
return super.toString() + " (" + getName() + ")";
}
if(chat != null && player != null) public interface LGChooseCallback {
chat.join(this, callback == null ? chat.getDefaultCallback() : callback); void callback(LGPlayer choosen);
} }
public void leaveChat() {
joinChat(new LGNoChat(), null);
}
public void onChat(String message) {
if(chat != null) {
chat.sendMessage(this, message);
}
}
public void playAudio(LGSound sound, double volume) {
if(player != null)
getPlayer().playSound(getPlayer().getLocation(), sound.getSound(), (float)volume, 1);
}
public void stopAudio(LGSound sound) {
if(player != null)
getPlayer().stopSound(sound.getSound());
}
long lastChoose;
public void chooseAction() {
long now = System.currentTimeMillis();
if(lastChoose+200 < now) {
if(chooseCallback != null)
chooseCallback.callback(getPlayerOnCursor(getGame().getInGame()));
lastChoose = now;
}
}
@Override
public String toString() {
return super.toString()+" ("+getName()+")";
}
} }

View file

@ -1,19 +1,19 @@
package fr.leomelki.loupgarou.classes; package fr.leomelki.loupgarou.classes;
import lombok.Getter;
import org.bukkit.Sound; import org.bukkit.Sound;
import lombok.Getter;
public enum LGSound { public enum LGSound {
KILL(Sound.ENTITY_BLAZE_DEATH), KILL(Sound.ENTITY_BLAZE_DEATH),
START_NIGHT(Sound.ENTITY_SKELETON_DEATH), START_NIGHT(Sound.ENTITY_SKELETON_DEATH),
START_DAY(Sound.ENTITY_ZOMBIE_DEATH), START_DAY(Sound.ENTITY_ZOMBIE_DEATH),
AMBIANT_NIGHT(Sound.MUSIC_DISC_MALL), AMBIANT_NIGHT(Sound.MUSIC_DISC_MALL),
AMBIANT_DAY(Sound.MUSIC_DISC_MELLOHI); AMBIANT_DAY(Sound.MUSIC_DISC_MELLOHI);
@Getter @Getter
final Sound sound; final Sound sound;
LGSound(Sound sound){
this.sound = sound; LGSound(Sound sound) {
} this.sound = sound;
}
} }

View file

@ -1,9 +1,17 @@
package fr.leomelki.loupgarou.classes; package fr.leomelki.loupgarou.classes;
import java.lang.reflect.Field; import com.comphenix.protocol.wrappers.EnumWrappers.ItemSlot;
import java.util.*; import com.comphenix.protocol.wrappers.WrappedDataWatcher;
import java.util.Map.Entry; import com.comphenix.protocol.wrappers.WrappedDataWatcher.WrappedDataWatcherObject;
import com.comphenix.protocol.wrappers.WrappedWatchableObject;
import fr.leomelki.com.comphenix.packetwrapper.*;
import fr.leomelki.loupgarou.MainLg;
import fr.leomelki.loupgarou.classes.LGGame.TextGenerator;
import fr.leomelki.loupgarou.classes.LGPlayer.LGChooseCallback;
import fr.leomelki.loupgarou.events.LGVoteLeaderChange;
import fr.leomelki.loupgarou.utils.VariousUtils;
import lombok.Getter;
import net.minecraft.server.v1_15_R1.*;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@ -13,327 +21,327 @@ import org.bukkit.entity.EntityType;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import com.comphenix.protocol.wrappers.EnumWrappers.ItemSlot; import java.lang.reflect.Field;
import com.comphenix.protocol.wrappers.WrappedDataWatcher; import java.util.*;
import com.comphenix.protocol.wrappers.WrappedDataWatcher.WrappedDataWatcherObject; import java.util.Map.Entry;
import com.comphenix.protocol.wrappers.WrappedWatchableObject;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerEntityDestroy;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerEntityEquipment;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerEntityLook;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerEntityMetadata;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerSpawnEntityLiving;
import fr.leomelki.loupgarou.MainLg;
import fr.leomelki.loupgarou.classes.LGGame.TextGenerator;
import fr.leomelki.loupgarou.classes.LGPlayer.LGChooseCallback;
import fr.leomelki.loupgarou.events.LGVoteLeaderChange;
import fr.leomelki.loupgarou.utils.VariousUtils;
import lombok.Getter;
import net.minecraft.server.v1_15_R1.DataWatcher;
import net.minecraft.server.v1_15_R1.DataWatcherObject;
import net.minecraft.server.v1_15_R1.Entity;
import net.minecraft.server.v1_15_R1.EntityArmorStand;
import net.minecraft.server.v1_15_R1.IChatBaseComponent;
import net.minecraft.server.v1_15_R1.PacketPlayOutEntityMetadata;
public class LGVote { public class LGVote {
@Getter LGPlayer choosen; private static final EntityArmorStand eas = new EntityArmorStand(((CraftWorld) Bukkit.getWorlds().get(0)).getHandle(), 0, 0, 0);
private int timeout;
private final int initialTimeout;
private final int littleTimeout;
private Runnable callback;
private final LGGame game;
@Getter private List<LGPlayer> participants, viewers;
private final TextGenerator generator;
@Getter private final HashMap<LGPlayer, List<LGPlayer>> votes = new HashMap<>();
private int votesSize = 0;
private LGPlayer mayor;
private ArrayList<LGPlayer> latestTop = new ArrayList<>(), blacklisted = new ArrayList<>();
private final boolean randomIfEqual;
@Getter private boolean mayorVote;
private boolean ended;
public LGVote(int timeout, int littleTimeout, LGGame game, boolean positiveVote, boolean randomIfEqual, TextGenerator generator) {
this.littleTimeout = littleTimeout;
this.initialTimeout = timeout;
this.timeout = timeout;
this.game = game;
this.generator = generator;
this.randomIfEqual = randomIfEqual;
}
public void start(List<LGPlayer> participants, List<LGPlayer> viewers, Runnable callback) {
this.callback = callback;
this.participants = participants;
this.viewers = viewers;
game.wait(timeout, this::end, generator);
for(LGPlayer player : participants)
player.choose(getChooseCallback(player));
}
public void start(List<LGPlayer> participants, List<LGPlayer> viewers, Runnable callback, ArrayList<LGPlayer> blacklisted) {
this.callback = callback;
this.participants = participants;
this.viewers = viewers;
game.wait(timeout, this::end, generator);
for(LGPlayer player : participants)
player.choose(getChooseCallback(player));
this.blacklisted = blacklisted;
}
public void start(List<LGPlayer> participants, List<LGPlayer> viewers, Runnable callback, LGPlayer mayor) {
this.callback = callback;
this.participants = participants;
this.viewers = viewers;
this.mayor = mayor;
game.wait(timeout, this::end, generator);
for(LGPlayer player : participants)
player.choose(getChooseCallback(player));
}
private static DataWatcherObject<Optional<IChatBaseComponent>> az; private static DataWatcherObject<Optional<IChatBaseComponent>> az;
private static DataWatcherObject<Boolean> aA; private static DataWatcherObject<Boolean> aA;
private static DataWatcherObject<Byte> T; private static DataWatcherObject<Byte> T;
private static final EntityArmorStand eas = new EntityArmorStand(((CraftWorld)Bukkit.getWorlds().get(0)).getHandle(), 0, 0, 0);
static { static {
try { try {
Field f = Entity.class.getDeclaredField("az"); Field f = Entity.class.getDeclaredField("az");
f.setAccessible(true); f.setAccessible(true);
az = (DataWatcherObject<Optional<IChatBaseComponent>>) f.get(null); az = (DataWatcherObject<Optional<IChatBaseComponent>>) f.get(null);
f = Entity.class.getDeclaredField("aA"); f = Entity.class.getDeclaredField("aA");
f.setAccessible(true); f.setAccessible(true);
aA = (DataWatcherObject<Boolean>) f.get(null); aA = (DataWatcherObject<Boolean>) f.get(null);
f = Entity.class.getDeclaredField("T"); f = Entity.class.getDeclaredField("T");
f.setAccessible(true); f.setAccessible(true);
T = (DataWatcherObject<Byte>) f.get(null); T = (DataWatcherObject<Byte>) f.get(null);
}catch(Exception err) { } catch (Exception err) {
err.printStackTrace(); err.printStackTrace();
} }
} }
private void end() {
ended = true;
for(LGPlayer lgp : viewers)
showVoting(lgp, null);
for(LGPlayer lgp : votes.keySet())
updateVotes(lgp, true);
int max = 0;
boolean equal = false;
for(Entry<LGPlayer, List<LGPlayer>> entry : votes.entrySet())
if(entry.getValue().size() > max) {
equal = false;
max = entry.getValue().size();
choosen = entry.getKey();
}else if(entry.getValue().size() == max)
equal = true;
for(LGPlayer player : participants) {
player.getCache().remove("vote");
player.stopChoosing();
}
if(equal)
choosen = null;
if(equal && mayor == null && randomIfEqual) {
ArrayList<LGPlayer> choosable = new ArrayList<>();
for(Entry<LGPlayer, List<LGPlayer>> entry : votes.entrySet())
if(entry.getValue().size() == max)
choosable.add(entry.getKey());
choosen = choosable.get(game.getRandom().nextInt(choosable.size()));
}
if(equal && mayor != null && max != 0) { final WrappedDataWatcherObject invisible = new WrappedDataWatcherObject(0, WrappedDataWatcher.Registry.get(Byte.class));
for(LGPlayer player : viewers) final WrappedDataWatcherObject noGravity = new WrappedDataWatcherObject(5, WrappedDataWatcher.Registry.get(Boolean.class));
player.sendMessage("§9Égalité, le §5§lCapitaine§9 va départager les votes."); private final int initialTimeout;
mayor.sendMessage("§6Tu dois choisir qui va mourir."); private final int littleTimeout;
private final LGGame game;
private final TextGenerator generator;
@Getter
private final HashMap<LGPlayer, List<LGPlayer>> votes = new HashMap<>();
private final boolean randomIfEqual;
@Getter
LGPlayer choosen;
WrappedDataWatcherObject customNameVisible = new WrappedDataWatcherObject(3, WrappedDataWatcher.Registry.get(Boolean.class));
WrappedDataWatcherObject customName = new WrappedDataWatcherObject(2, WrappedDataWatcher.Registry.get(IChatBaseComponent.class));
WrappedDataWatcherObject item = new WrappedDataWatcherObject(7, WrappedDataWatcher.Registry.get(net.minecraft.server.v1_15_R1.ItemStack.class));
private int timeout;
private Runnable callback;
@Getter
private List<LGPlayer> participants, viewers;
private int votesSize = 0;
private LGPlayer mayor;
private ArrayList<LGPlayer> latestTop = new ArrayList<>(), blacklisted = new ArrayList<>();
@Getter
private boolean mayorVote;
private boolean ended;
ArrayList<LGPlayer> choosable = new ArrayList<>(); public LGVote(int timeout, int littleTimeout, LGGame game, boolean positiveVote, boolean randomIfEqual, TextGenerator generator) {
for(Entry<LGPlayer, List<LGPlayer>> entry : votes.entrySet()) this.littleTimeout = littleTimeout;
if(entry.getValue().size() == max) this.initialTimeout = timeout;
choosable.add(entry.getKey()); this.timeout = timeout;
this.game = game;
this.generator = generator;
this.randomIfEqual = randomIfEqual;
}
for(int i = 0;i<choosable.size();i++) { public void start(List<LGPlayer> participants, List<LGPlayer> viewers, Runnable callback) {
LGPlayer lgp = choosable.get(i); this.callback = callback;
showArrow(mayor, lgp, -mayor.getPlayer().getEntityId()-i); this.participants = participants;
} this.viewers = viewers;
game.wait(timeout, this::end, generator);
for (LGPlayer player : participants)
player.choose(getChooseCallback(player));
}
StringJoiner sj = new StringJoiner(", "); public void start(List<LGPlayer> participants, List<LGPlayer> viewers, Runnable callback, ArrayList<LGPlayer> blacklisted) {
for(int i = 0;i<choosable.size()-1;i++) this.callback = callback;
sj.add(choosable.get(0).getName()); this.participants = participants;
//mayor.sendTitle("§6C'est à vous de délibérer", "Faut-il tuer "+sj+" ou "+choosable.get(choosable.size()-1).getName()+" ?", 100); this.viewers = viewers;
ArrayList<LGPlayer> blackListed = new ArrayList<>(); game.wait(timeout, this::end, generator);
for(LGPlayer player : participants) for (LGPlayer player : participants)
if(!choosable.contains(player)) player.choose(getChooseCallback(player));
blackListed.add(player); this.blacklisted = blacklisted;
else { }
VariousUtils.setWarning(player.getPlayer(), true);
//player.sendMessage("§4§lVous êtes un des principaux suspects ! Défendez vous !");
//player.sendTitle("§4§lDéfendez vous !", "§cVous êtes l'un des principaux suspects", 100);
}
mayorVote = true;
game.wait(30, ()->{
for(LGPlayer player : participants)
if(choosable.contains(player))
VariousUtils.setWarning(player.getPlayer(), false);
for(int i = 0;i<choosable.size();i++) { public void start(List<LGPlayer> participants, List<LGPlayer> viewers, Runnable callback, LGPlayer mayor) {
LGPlayer lgp = choosable.get(i); this.callback = callback;
showArrow(mayor, null, -mayor.getPlayer().getEntityId()-i); this.participants = participants;
} this.viewers = viewers;
//Choix au hasard d'un joueur si personne n'a été désigné this.mayor = mayor;
choosen = choosable.get(game.getRandom().nextInt(choosable.size())); game.wait(timeout, this::end, generator);
callback.run(); for (LGPlayer player : participants)
}, (player, secondsLeft)->{ player.choose(getChooseCallback(player));
timeout = secondsLeft; }
return mayor == player ? "§6Il te reste §e"+secondsLeft+" seconde"+(secondsLeft > 1 ? "s" : "")+"§6 pour délibérer" : "§6Le §5§lCapitaine§6 délibère (§e"+secondsLeft+" s§6)";
});
mayor.choose(choosen -> {
if(choosen != null) {
if(blackListed.contains(choosen))
mayor.sendMessage("§4§oCe joueur n'est pas concerné par le choix.");
else {
for(LGPlayer player : participants)
if(choosable.contains(player))
VariousUtils.setWarning(player.getPlayer(), false);
for(int i = 0;i<choosable.size();i++) { private void end() {
LGPlayer lgp = choosable.get(i); ended = true;
showArrow(mayor, null, -mayor.getPlayer().getEntityId()-i); for (LGPlayer lgp : viewers)
} showVoting(lgp, null);
game.cancelWait(); for (LGPlayer lgp : votes.keySet())
LGVote.this.choosen = choosen; updateVotes(lgp, true);
callback.run(); int max = 0;
} boolean equal = false;
} for (Entry<LGPlayer, List<LGPlayer>> entry : votes.entrySet())
}); if (entry.getValue().size() > max) {
} else { equal = false;
game.cancelWait(); max = entry.getValue().size();
callback.run(); choosen = entry.getKey();
} } else if (entry.getValue().size() == max)
equal = true;
for (LGPlayer player : participants) {
player.getCache().remove("vote");
player.stopChoosing();
}
if (equal)
choosen = null;
if (equal && mayor == null && randomIfEqual) {
ArrayList<LGPlayer> choosable = new ArrayList<>();
for (Entry<LGPlayer, List<LGPlayer>> entry : votes.entrySet())
if (entry.getValue().size() == max)
choosable.add(entry.getKey());
choosen = choosable.get(game.getRandom().nextInt(choosable.size()));
}
} if (equal && mayor != null && max != 0) {
public LGChooseCallback getChooseCallback(LGPlayer who) { for (LGPlayer player : viewers)
return choosen -> { player.sendMessage("§9Égalité, le §5§lCapitaine§9 va départager les votes.");
if(choosen != null) mayor.sendMessage("§6Tu dois choisir qui va mourir.");
vote(who, choosen);
};
}
public void vote(LGPlayer voter, LGPlayer voted) {
if(blacklisted.contains(voted)) {
voter.sendMessage("§cVous ne pouvez pas votre pour §7§l"+voted.getName()+"§c.");
return;
}
if(voted == voter.getCache().get("vote"))
voted = null;
if(voted != null && voter.getPlayer() != null) ArrayList<LGPlayer> choosable = new ArrayList<>();
votesSize++; for (Entry<LGPlayer, List<LGPlayer>> entry : votes.entrySet())
if(voter.getCache().has("vote")) if (entry.getValue().size() == max)
votesSize--; choosable.add(entry.getKey());
if(votesSize == participants.size() && game.getWaitTicks() > littleTimeout*20) { for (int i = 0; i < choosable.size(); i++) {
votesSize = 999; LGPlayer lgp = choosable.get(i);
game.wait(littleTimeout, initialTimeout, this::end, generator); showArrow(mayor, lgp, -mayor.getPlayer().getEntityId() - i);
} }
String italic = game.isDay() ? "" : "§o";
boolean changeVote = false;
if(voter.getCache().has("vote")) {//On enlève l'ancien vote
LGPlayer devoted = voter.getCache().get("vote");
if(votes.containsKey(devoted)) {
List<LGPlayer> voters = votes.get(devoted);
if(voters != null) {
voters.remove(voter);
if(voters.size() == 0)
votes.remove(devoted);
}
}
voter.getCache().remove("vote");
updateVotes(devoted);
changeVote = true;
}
if(voted != null) {//Si il vient de voter, on ajoute le nouveau vote StringJoiner sj = new StringJoiner(", ");
//voter.sendTitle("", "§7Tu as voté pour §7§l"+voted.getName(), 40); for (int i = 0; i < choosable.size() - 1; i++)
if(votes.containsKey(voted)) sj.add(choosable.get(0).getName());
votes.get(voted).add(voter); //mayor.sendTitle("§6C'est à vous de délibérer", "Faut-il tuer "+sj+" ou "+choosable.get(choosable.size()-1).getName()+" ?", 100);
else ArrayList<LGPlayer> blackListed = new ArrayList<>();
votes.put(voted, new ArrayList<>(Collections.singletonList(voter))); for (LGPlayer player : participants)
voter.getCache().set("vote", voted); if (!choosable.contains(player))
updateVotes(voted); blackListed.add(player);
} else {
VariousUtils.setWarning(player.getPlayer(), true);
//player.sendMessage("§4§lVous êtes un des principaux suspects ! Défendez vous !");
//player.sendTitle("§4§lDéfendez vous !", "§cVous êtes l'un des principaux suspects", 100);
}
mayorVote = true;
game.wait(30, () -> {
for (LGPlayer player : participants)
if (choosable.contains(player))
VariousUtils.setWarning(player.getPlayer(), false);
if(voter.getPlayer() != null) { for (int i = 0; i < choosable.size(); i++) {
showVoting(voter, voted); LGPlayer lgp = choosable.get(i);
String message; showArrow(mayor, null, -mayor.getPlayer().getEntityId() - i);
if(voted != null) { }
if(changeVote) { //Choix au hasard d'un joueur si personne n'a été désigné
message = "§7§l"+voter.getName()+"§6 a changé son vote pour §7§l"+voted.getName()+"§6."; choosen = choosable.get(game.getRandom().nextInt(choosable.size()));
voter.sendMessage("§6Tu as changé de vote pour §7§l"+voted.getName()+"§6."); callback.run();
} else { }, (player, secondsLeft) -> {
message = "§7§l"+voter.getName()+"§6 a voté pour §7§l"+voted.getName()+"§6."; timeout = secondsLeft;
voter.sendMessage("§6Tu as voté pour §7§l"+voted.getName()+"§6."); return mayor == player ? "§6Il te reste §e" + secondsLeft + " seconde" + (secondsLeft > 1 ? "s" : "") + "§6 pour délibérer" : "§6Le §5§lCapitaine§6 délibère (§e" + secondsLeft + " s§6)";
} });
} else { mayor.choose(choosen -> {
message = "§7§l"+voter.getName()+"§6 a annulé son vote."; if (choosen != null) {
voter.sendMessage("§6Tu as annulé ton vote."); if (blackListed.contains(choosen))
} mayor.sendMessage("§4§oCe joueur n'est pas concerné par le choix.");
else {
for (LGPlayer player : participants)
if (choosable.contains(player))
VariousUtils.setWarning(player.getPlayer(), false);
for(LGPlayer player : viewers) for (int i = 0; i < choosable.size(); i++) {
if(player != voter) LGPlayer lgp = choosable.get(i);
player.sendMessage(message); showArrow(mayor, null, -mayor.getPlayer().getEntityId() - i);
} }
} game.cancelWait();
LGVote.this.choosen = choosen;
callback.run();
}
}
});
} else {
game.cancelWait();
callback.run();
}
public List<LGPlayer> getVotes(LGPlayer voted){ }
return votes.containsKey(voted) ? votes.get(voted) : new ArrayList<>(0);
}
private void updateVotes(LGPlayer voted) { public LGChooseCallback getChooseCallback(LGPlayer who) {
updateVotes(voted, false); return choosen -> {
} if (choosen != null)
private void updateVotes(LGPlayer voted, boolean kill) { vote(who, choosen);
int entityId = Integer.MIN_VALUE+voted.getPlayer().getEntityId(); };
WrapperPlayServerEntityDestroy destroy = new WrapperPlayServerEntityDestroy(); }
destroy.setEntityIds(new int[] {entityId});
for(LGPlayer lgp : viewers)
destroy.sendPacket(lgp.getPlayer());
if(!kill) { public void vote(LGPlayer voter, LGPlayer voted) {
int max = 0; if (blacklisted.contains(voted)) {
for(Entry<LGPlayer, List<LGPlayer>> entry : votes.entrySet()) voter.sendMessage("§cVous ne pouvez pas votre pour §7§l" + voted.getName() + "§c.");
if(entry.getValue().size() > max) return;
max = entry.getValue().size(); }
ArrayList<LGPlayer> last = latestTop; if (voted == voter.getCache().get("vote"))
latestTop = new ArrayList<>(); voted = null;
for(Entry<LGPlayer, List<LGPlayer>> entry : votes.entrySet())
if(entry.getValue().size() == max)
latestTop.add(entry.getKey());
Bukkit.getPluginManager().callEvent(new LGVoteLeaderChange(game, this, last, latestTop));
}
if(votes.containsKey(voted) && !kill) { if (voted != null && voter.getPlayer() != null)
Location loc = voted.getPlayer().getLocation(); votesSize++;
if (voter.getCache().has("vote"))
votesSize--;
WrapperPlayServerSpawnEntityLiving spawn = new WrapperPlayServerSpawnEntityLiving(); if (votesSize == participants.size() && game.getWaitTicks() > littleTimeout * 20) {
spawn.setEntityID(entityId); votesSize = 999;
spawn.setType(EntityType.DROPPED_ITEM); game.wait(littleTimeout, initialTimeout, this::end, generator);
//spawn.setMetadata(new WrappedDataWatcher(Arrays.asList(new WrappedWatchableObject(0, (byte)0x20), new WrappedWatchableObject(5, true)))); }
spawn.setX(loc.getX()); String italic = game.isDay() ? "" : "§o";
spawn.setY(loc.getY()+0.3); boolean changeVote = false;
spawn.setZ(loc.getZ()); if (voter.getCache().has("vote")) {//On enlève l'ancien vote
LGPlayer devoted = voter.getCache().get("vote");
if (votes.containsKey(devoted)) {
List<LGPlayer> voters = votes.get(devoted);
if (voters != null) {
voters.remove(voter);
if (voters.size() == 0)
votes.remove(devoted);
}
}
voter.getCache().remove("vote");
updateVotes(devoted);
changeVote = true;
}
int votesNbr = votes.get(voted).size(); if (voted != null) {//Si il vient de voter, on ajoute le nouveau vote
final int numberOfParticipants = participants.size(); //voter.sendTitle("", "§7Tu as voté pour §7§l"+voted.getName(), 40);
final double votePercentage = ((double)votesNbr / numberOfParticipants) * 100; if (votes.containsKey(voted))
final String votePercentageFormated = String.format("%.0f%%", votePercentage); votes.get(voted).add(voter);
final String voteContent = "§6§l" + votesNbr + " / " + numberOfParticipants + "§e vote" + (votesNbr > 1 ? "s" : "") + " (§6§l" + votePercentageFormated + "§e)"; else
votes.put(voted, new ArrayList<>(Collections.singletonList(voter)));
voter.getCache().set("vote", voted);
updateVotes(voted);
}
if (voter.getPlayer() != null) {
showVoting(voter, voted);
String message;
if (voted != null) {
if (changeVote) {
message = "§7§l" + voter.getName() + "§6 a changé son vote pour §7§l" + voted.getName() + "§6.";
voter.sendMessage("§6Tu as changé de vote pour §7§l" + voted.getName() + "§6.");
} else {
message = "§7§l" + voter.getName() + "§6 a voté pour §7§l" + voted.getName() + "§6.";
voter.sendMessage("§6Tu as voté pour §7§l" + voted.getName() + "§6.");
}
} else {
message = "§7§l" + voter.getName() + "§6 a annulé son vote.";
voter.sendMessage("§6Tu as annulé ton vote.");
}
for (LGPlayer player : viewers)
if (player != voter)
player.sendMessage(message);
}
}
public List<LGPlayer> getVotes(LGPlayer voted) {
return votes.containsKey(voted) ? votes.get(voted) : new ArrayList<>(0);
}
private void updateVotes(LGPlayer voted) {
updateVotes(voted, false);
}
private void updateVotes(LGPlayer voted, boolean kill) {
int entityId = Integer.MIN_VALUE + voted.getPlayer().getEntityId();
WrapperPlayServerEntityDestroy destroy = new WrapperPlayServerEntityDestroy();
destroy.setEntityIds(new int[]{entityId});
for (LGPlayer lgp : viewers)
destroy.sendPacket(lgp.getPlayer());
if (!kill) {
int max = 0;
for (Entry<LGPlayer, List<LGPlayer>> entry : votes.entrySet())
if (entry.getValue().size() > max)
max = entry.getValue().size();
ArrayList<LGPlayer> last = latestTop;
latestTop = new ArrayList<>();
for (Entry<LGPlayer, List<LGPlayer>> entry : votes.entrySet())
if (entry.getValue().size() == max)
latestTop.add(entry.getKey());
Bukkit.getPluginManager().callEvent(new LGVoteLeaderChange(game, this, last, latestTop));
}
if (votes.containsKey(voted) && !kill) {
Location loc = voted.getPlayer().getLocation();
WrapperPlayServerSpawnEntityLiving spawn = new WrapperPlayServerSpawnEntityLiving();
spawn.setEntityID(entityId);
spawn.setType(EntityType.DROPPED_ITEM);
//spawn.setMetadata(new WrappedDataWatcher(Arrays.asList(new WrappedWatchableObject(0, (byte)0x20), new WrappedWatchableObject(5, true))));
spawn.setX(loc.getX());
spawn.setY(loc.getY() + 0.3);
spawn.setZ(loc.getZ());
int votesNbr = votes.get(voted).size();
final int numberOfParticipants = participants.size();
final double votePercentage = ((double) votesNbr / numberOfParticipants) * 100;
final String votePercentageFormated = String.format("%.0f%%", votePercentage);
final String voteContent = "§6§l" + votesNbr + " / " + numberOfParticipants + "§e vote" + (votesNbr > 1 ? "s" : "") + " (§6§l" + votePercentageFormated + "§e)";
/*WrapperPlayServerEntityMetadata meta = new WrapperPlayServerEntityMetadata(); /*WrapperPlayServerEntityMetadata meta = new WrapperPlayServerEntityMetadata();
meta.setEntityID(entityId); meta.setEntityID(entityId);
meta.setMetadata(Arrays.asList(new WrappedWatchableObject(invisible, (byte)0x20), new WrappedWatchableObject(noGravity, true), new WrappedWatchableObject(customNameVisible, true), new WrappedWatchableObject(customName, IChatBaseComponent.ChatSerializer.b("§6§l"+votesNbr+"§e vote"+(votesNbr > 1 ? "s" : ""))))); meta.setMetadata(Arrays.asList(new WrappedWatchableObject(invisible, (byte)0x20), new WrappedWatchableObject(noGravity, true), new WrappedWatchableObject(customNameVisible, true), new WrappedWatchableObject(customName, IChatBaseComponent.ChatSerializer.b("§6§l"+votesNbr+"§e vote"+(votesNbr > 1 ? "s" : "")))));
*/ */
DataWatcher datawatcher = new DataWatcher(eas); DataWatcher datawatcher = new DataWatcher(eas);
datawatcher.register(T, (byte)0x20); datawatcher.register(T, (byte) 0x20);
datawatcher.register(az, Optional.ofNullable(IChatBaseComponent.ChatSerializer.a("{\"text\":\"" + voteContent + "\"}"))); datawatcher.register(az, Optional.ofNullable(IChatBaseComponent.ChatSerializer.a("{\"text\":\"" + voteContent + "\"}")));
datawatcher.register(aA, true); datawatcher.register(aA, true);
PacketPlayOutEntityMetadata meta = new PacketPlayOutEntityMetadata(entityId, datawatcher, true); PacketPlayOutEntityMetadata meta = new PacketPlayOutEntityMetadata(entityId, datawatcher, true);
for(LGPlayer lgp : viewers) { for (LGPlayer lgp : viewers) {
spawn.sendPacket(lgp.getPlayer()); spawn.sendPacket(lgp.getPlayer());
((CraftPlayer)lgp.getPlayer()).getHandle().playerConnection.sendPacket(meta); ((CraftPlayer) lgp.getPlayer()).getHandle().playerConnection.sendPacket(meta);
} }
/* EntityArmorStand ea = new EntityArmorStand(((CraftWorld)loc.getWorld()).getHandle(), loc.getX(), loc.getY()+0.3, loc.getZ()); /* EntityArmorStand ea = new EntityArmorStand(((CraftWorld)loc.getWorld()).getHandle(), loc.getX(), loc.getY()+0.3, loc.getZ());
@ -365,115 +373,112 @@ public class LGVote {
spawn.setZ(loc.getZ());*/ spawn.setZ(loc.getZ());*/
/* for(LGPlayer lgp : viewers) /* for(LGPlayer lgp : viewers)
((CraftPlayer)lgp.getPlayer()).getHandle().playerConnection.sendPacket(spawn);*/ ((CraftPlayer)lgp.getPlayer()).getHandle().playerConnection.sendPacket(spawn);*/
// spawn.sendPacket(lgp.getPlayer()); // spawn.sendPacket(lgp.getPlayer());
} }
} }
final WrappedDataWatcherObject invisible = new WrappedDataWatcherObject(0, WrappedDataWatcher.Registry.get(Byte.class));
final WrappedDataWatcherObject noGravity = new WrappedDataWatcherObject(5, WrappedDataWatcher.Registry.get(Boolean.class));
WrappedDataWatcherObject customNameVisible = new WrappedDataWatcherObject(3, WrappedDataWatcher.Registry.get(Boolean.class));
WrappedDataWatcherObject customName = new WrappedDataWatcherObject(2, WrappedDataWatcher.Registry.get(IChatBaseComponent.class));
WrappedDataWatcherObject item = new WrappedDataWatcherObject(7, WrappedDataWatcher.Registry.get(net.minecraft.server.v1_15_R1.ItemStack.class));
private void showVoting(LGPlayer to, LGPlayer ofWho) {
int entityId = -to.getPlayer().getEntityId();
WrapperPlayServerEntityDestroy destroy = new WrapperPlayServerEntityDestroy();
destroy.setEntityIds(new int[] {entityId});
destroy.sendPacket(to.getPlayer());
if(ofWho != null) {
WrapperPlayServerSpawnEntityLiving spawn = new WrapperPlayServerSpawnEntityLiving();
spawn.setEntityID(entityId);
spawn.setType(EntityType.DROPPED_ITEM);
//spawn.setMetadata(new WrappedDataWatcher(Arrays.asList(new WrappedWatchableObject(0, (byte)0x20), new WrappedWatchableObject(5, true))));
Location loc = ofWho.getPlayer().getLocation();
spawn.setX(loc.getX());
spawn.setY(loc.getY()+1.3);
spawn.setZ(loc.getZ());
spawn.setHeadPitch(0);
Location toLoc = to.getPlayer().getLocation();
double diffX = loc.getX()-toLoc.getX(),
diffZ = loc.getZ()-toLoc.getZ();
float yaw = 180-((float) Math.toDegrees(Math.atan2(diffX, diffZ)));
spawn.setYaw(yaw); private void showVoting(LGPlayer to, LGPlayer ofWho) {
spawn.sendPacket(to.getPlayer()); int entityId = -to.getPlayer().getEntityId();
WrapperPlayServerEntityDestroy destroy = new WrapperPlayServerEntityDestroy();
destroy.setEntityIds(new int[]{entityId});
destroy.sendPacket(to.getPlayer());
if (ofWho != null) {
WrapperPlayServerSpawnEntityLiving spawn = new WrapperPlayServerSpawnEntityLiving();
spawn.setEntityID(entityId);
spawn.setType(EntityType.DROPPED_ITEM);
//spawn.setMetadata(new WrappedDataWatcher(Arrays.asList(new WrappedWatchableObject(0, (byte)0x20), new WrappedWatchableObject(5, true))));
Location loc = ofWho.getPlayer().getLocation();
spawn.setX(loc.getX());
spawn.setY(loc.getY() + 1.3);
spawn.setZ(loc.getZ());
spawn.setHeadPitch(0);
Location toLoc = to.getPlayer().getLocation();
double diffX = loc.getX() - toLoc.getX(),
diffZ = loc.getZ() - toLoc.getZ();
float yaw = 180 - ((float) Math.toDegrees(Math.atan2(diffX, diffZ)));
WrapperPlayServerEntityMetadata meta = new WrapperPlayServerEntityMetadata(); spawn.setYaw(yaw);
meta.setEntityID(entityId); spawn.sendPacket(to.getPlayer());
meta.setMetadata(Arrays.asList(new WrappedWatchableObject(invisible, (byte)0x20), new WrappedWatchableObject(noGravity, true)));
meta.sendPacket(to.getPlayer());
WrapperPlayServerEntityLook look = new WrapperPlayServerEntityLook(); WrapperPlayServerEntityMetadata meta = new WrapperPlayServerEntityMetadata();
look.setEntityID(entityId); meta.setEntityID(entityId);
look.setPitch(0); meta.setMetadata(Arrays.asList(new WrappedWatchableObject(invisible, (byte) 0x20), new WrappedWatchableObject(noGravity, true)));
look.setYaw(yaw); meta.sendPacket(to.getPlayer());
look.sendPacket(to.getPlayer());
new BukkitRunnable() { WrapperPlayServerEntityLook look = new WrapperPlayServerEntityLook();
look.setEntityID(entityId);
look.setPitch(0);
look.setYaw(yaw);
look.sendPacket(to.getPlayer());
@Override new BukkitRunnable() {
public void run() {
WrapperPlayServerEntityEquipment equip = new WrapperPlayServerEntityEquipment();
equip.setEntityID(entityId);
equip.setSlot(ItemSlot.HEAD);
ItemStack skull = new ItemStack(Material.EMERALD);
equip.setItem(skull);
equip.sendPacket(to.getPlayer());
}
}.runTaskLater(MainLg.getInstance(), 2);
}
}
private void showArrow(LGPlayer to, LGPlayer ofWho, int entityId) { @Override
WrapperPlayServerEntityDestroy destroy = new WrapperPlayServerEntityDestroy(); public void run() {
destroy.setEntityIds(new int[] {entityId}); WrapperPlayServerEntityEquipment equip = new WrapperPlayServerEntityEquipment();
destroy.sendPacket(to.getPlayer()); equip.setEntityID(entityId);
if(ofWho != null) { equip.setSlot(ItemSlot.HEAD);
WrapperPlayServerSpawnEntityLiving spawn = new WrapperPlayServerSpawnEntityLiving(); ItemStack skull = new ItemStack(Material.EMERALD);
spawn.setEntityID(entityId); equip.setItem(skull);
spawn.setType(EntityType.DROPPED_ITEM); equip.sendPacket(to.getPlayer());
//spawn.setMetadata(new WrappedDataWatcher()); }
Location loc = ofWho.getPlayer().getLocation(); }.runTaskLater(MainLg.getInstance(), 2);
spawn.setX(loc.getX()); }
spawn.setY(loc.getY()+1.3); }
spawn.setZ(loc.getZ());
spawn.setHeadPitch(0);
Location toLoc = to.getPlayer().getLocation();
double diffX = loc.getX()-toLoc.getX(),
diffZ = loc.getZ()-toLoc.getZ();
float yaw = 180-((float) Math.toDegrees(Math.atan2(diffX, diffZ)));
spawn.setYaw(yaw); private void showArrow(LGPlayer to, LGPlayer ofWho, int entityId) {
spawn.sendPacket(to.getPlayer()); WrapperPlayServerEntityDestroy destroy = new WrapperPlayServerEntityDestroy();
destroy.setEntityIds(new int[]{entityId});
destroy.sendPacket(to.getPlayer());
if (ofWho != null) {
WrapperPlayServerSpawnEntityLiving spawn = new WrapperPlayServerSpawnEntityLiving();
spawn.setEntityID(entityId);
spawn.setType(EntityType.DROPPED_ITEM);
//spawn.setMetadata(new WrappedDataWatcher());
Location loc = ofWho.getPlayer().getLocation();
spawn.setX(loc.getX());
spawn.setY(loc.getY() + 1.3);
spawn.setZ(loc.getZ());
spawn.setHeadPitch(0);
Location toLoc = to.getPlayer().getLocation();
double diffX = loc.getX() - toLoc.getX(),
diffZ = loc.getZ() - toLoc.getZ();
float yaw = 180 - ((float) Math.toDegrees(Math.atan2(diffX, diffZ)));
WrapperPlayServerEntityMetadata meta = new WrapperPlayServerEntityMetadata(); spawn.setYaw(yaw);
meta.setEntityID(entityId); spawn.sendPacket(to.getPlayer());
meta.setMetadata(Arrays.asList(new WrappedWatchableObject(invisible, (byte)0x20), new WrappedWatchableObject(noGravity, true)));
meta.sendPacket(to.getPlayer());
WrapperPlayServerEntityLook look = new WrapperPlayServerEntityLook(); WrapperPlayServerEntityMetadata meta = new WrapperPlayServerEntityMetadata();
look.setEntityID(entityId); meta.setEntityID(entityId);
look.setPitch(0); meta.setMetadata(Arrays.asList(new WrappedWatchableObject(invisible, (byte) 0x20), new WrappedWatchableObject(noGravity, true)));
look.setYaw(yaw); meta.sendPacket(to.getPlayer());
look.sendPacket(to.getPlayer());
new BukkitRunnable() { WrapperPlayServerEntityLook look = new WrapperPlayServerEntityLook();
look.setEntityID(entityId);
look.setPitch(0);
look.setYaw(yaw);
look.sendPacket(to.getPlayer());
@Override new BukkitRunnable() {
public void run() {
WrapperPlayServerEntityEquipment equip = new WrapperPlayServerEntityEquipment(); @Override
equip.setEntityID(entityId); public void run() {
equip.setSlot(ItemSlot.HEAD); WrapperPlayServerEntityEquipment equip = new WrapperPlayServerEntityEquipment();
ItemStack skull = new ItemStack(Material.EMERALD); equip.setEntityID(entityId);
equip.setItem(skull); equip.setSlot(ItemSlot.HEAD);
equip.sendPacket(to.getPlayer()); ItemStack skull = new ItemStack(Material.EMERALD);
} equip.setItem(skull);
}.runTaskLater(MainLg.getInstance(), 2); equip.sendPacket(to.getPlayer());
} }
} }.runTaskLater(MainLg.getInstance(), 2);
public void remove(LGPlayer killed) { }
participants.remove(killed); }
if(!ended) {
votes.remove(killed); public void remove(LGPlayer killed) {
latestTop.remove(killed); participants.remove(killed);
} if (!ended) {
} votes.remove(killed);
latestTop.remove(killed);
}
}
} }

View file

@ -5,17 +5,18 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor @RequiredArgsConstructor
public enum LGWinType { public enum LGWinType {
VILLAGEOIS("§6§l§oLa partie a été gagnée par le §2§lVillage§6§l§o !"), VILLAGEOIS("§6§l§oLa partie a été gagnée par le §2§lVillage§6§l§o !"),
LOUPGAROU("§6§l§oLa partie a été gagnée par les §c§lLoups-Garous§6§l§o !"), LOUPGAROU("§6§l§oLa partie a été gagnée par les §c§lLoups-Garous§6§l§o !"),
LOUPGAROUBLANC("§6§l§oLa partie a été gagnée par le §c§lLoup-Garou Blanc§6§l§o !"), LOUPGAROUBLANC("§6§l§oLa partie a été gagnée par le §c§lLoup-Garou Blanc§6§l§o !"),
COUPLE("§6§l§oLa partie a été gagnée par le §d§lcouple§6§l§o !"), COUPLE("§6§l§oLa partie a été gagnée par le §d§lcouple§6§l§o !"),
ANGE("§6§l§oLa partie a été gagnée par l'§d§lAnge§6§l§o !"), ANGE("§6§l§oLa partie a été gagnée par l'§d§lAnge§6§l§o !"),
EQUAL("§7§l§oÉgalité§6§l§o, personne n'a gagné la partie !"), EQUAL("§7§l§oÉgalité§6§l§o, personne n'a gagné la partie !"),
SOLO("§6§l§oUn joueur solitaire a gagné la partie!"),//bug si ça s'affiche SOLO("§6§l§oUn joueur solitaire a gagné la partie!"),//bug si ça s'affiche
ASSASSIN("§6§l§oLa partie a été gagnée par l'§1§lAssassin§6§l§o !"), ASSASSIN("§6§l§oLa partie a été gagnée par l'§1§lAssassin§6§l§o !"),
PYROMANE("§6§l§oLa partie a été gagnée par le §6§lPyromane§6§l§o !"), PYROMANE("§6§l§oLa partie a été gagnée par le §6§lPyromane§6§l§o !"),
VAMPIRE("§6§l§oLa partie a été gagnée par les §5§lVampires§6§l§o !"), VAMPIRE("§6§l§oLa partie a été gagnée par les §5§lVampires§6§l§o !"),
NONE("§4Erreur: §cpersonne n'a gagné la partie."); NONE("§4Erreur: §cpersonne n'a gagné la partie.");
@Getter private final String message; @Getter
private final String message;
} }

View file

@ -1,35 +1,41 @@
package fr.leomelki.loupgarou.classes.chat; package fr.leomelki.loupgarou.classes.chat;
import java.util.HashMap;
import java.util.Map.Entry;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import java.util.HashMap;
import java.util.Map.Entry;
@RequiredArgsConstructor @RequiredArgsConstructor
public class LGChat { public class LGChat {
@Getter private final HashMap<LGPlayer, LGChatCallback> viewers = new HashMap<>(); @Getter
@Getter private final LGChatCallback defaultCallback; private final HashMap<LGPlayer, LGChatCallback> viewers = new HashMap<>();
@Getter
private final LGChatCallback defaultCallback;
public interface LGChatCallback{ public void sendMessage(LGPlayer sender, String message) {
String receive(LGPlayer sender, String message); String sendMessage = getViewers().get(sender).send(sender, message);
default String send(LGPlayer sender, String message) {return null;} for (Entry<LGPlayer, LGChatCallback> entry : viewers.entrySet())
} entry.getKey().sendMessage(sendMessage != null ? sendMessage : entry.getValue().receive(sender, message));
}
public void sendMessage(LGPlayer sender, String message) { public void join(LGPlayer player, LGChatCallback callback) {
String sendMessage = getViewers().get(sender).send(sender, message); if (getViewers().containsKey(player))
for(Entry<LGPlayer, LGChatCallback> entry : viewers.entrySet()) getViewers().replace(player, callback);
entry.getKey().sendMessage(sendMessage != null ? sendMessage : entry.getValue().receive(sender, message)); else
} getViewers().put(player, callback);
}
public void join(LGPlayer player, LGChatCallback callback) { public void leave(LGPlayer player) {
if(getViewers().containsKey(player)) getViewers().remove(player);
getViewers().replace(player, callback); }
else
getViewers().put(player, callback); public interface LGChatCallback {
} String receive(LGPlayer sender, String message);
public void leave(LGPlayer player) {
getViewers().remove(player); default String send(LGPlayer sender, String message) {
} return null;
}
}
} }

View file

@ -2,17 +2,19 @@ package fr.leomelki.loupgarou.classes.chat;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
public class LGNoChat extends LGChat{ public class LGNoChat extends LGChat {
public LGNoChat() { public LGNoChat() {
super(null); super(null);
} }
public void sendMessage(LGPlayer sender, String message) {} public void sendMessage(LGPlayer sender, String message) {
}
public void join(LGPlayer player, LGChatCallback callback) { public void join(LGPlayer player, LGChatCallback callback) {
} }
public void leave(LGPlayer player) {
} public void leave(LGPlayer player) {
}
} }

View file

@ -1,18 +1,20 @@
package fr.leomelki.loupgarou.events; package fr.leomelki.loupgarou.events;
import java.util.List;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import lombok.Getter; import lombok.Getter;
public class LGCustomItemChangeEvent extends LGEvent { import java.util.List;
@Getter private final LGPlayer player;
@Getter private final List<String> constraints;
public LGCustomItemChangeEvent(LGGame game, LGPlayer player, List<String> constraints) { public class LGCustomItemChangeEvent extends LGEvent {
super(game); @Getter
this.player = player; private final LGPlayer player;
this.constraints = constraints; @Getter
} private final List<String> constraints;
public LGCustomItemChangeEvent(LGGame game, LGPlayer player, List<String> constraints) {
super(game);
this.player = player;
this.constraints = constraints;
}
} }

View file

@ -2,8 +2,8 @@ package fr.leomelki.loupgarou.events;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
public class LGDayEndEvent extends LGEvent{ public class LGDayEndEvent extends LGEvent {
public LGDayEndEvent(LGGame game) { public LGDayEndEvent(LGGame game) {
super(game); super(game);
} }
} }

View file

@ -1,15 +1,16 @@
package fr.leomelki.loupgarou.events; package fr.leomelki.loupgarou.events;
import org.bukkit.event.Cancellable;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.bukkit.event.Cancellable;
public class LGDayStartEvent extends LGEvent implements Cancellable{ public class LGDayStartEvent extends LGEvent implements Cancellable {
public LGDayStartEvent(LGGame game) { @Getter
super(game); @Setter
} private boolean cancelled;
@Getter @Setter private boolean cancelled; public LGDayStartEvent(LGGame game) {
super(game);
}
} }

View file

@ -5,11 +5,13 @@ import fr.leomelki.loupgarou.classes.LGWinType;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
public class LGEndCheckEvent extends LGEvent{ public class LGEndCheckEvent extends LGEvent {
public LGEndCheckEvent(LGGame game, LGWinType winType) { @Getter
super(game); @Setter
this.winType = winType; private LGWinType winType;
}
@Getter @Setter private LGWinType winType; public LGEndCheckEvent(LGGame game, LGWinType winType) {
super(game);
this.winType = winType;
}
} }

View file

@ -1,22 +1,23 @@
package fr.leomelki.loupgarou.events; package fr.leomelki.loupgarou.events;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
@RequiredArgsConstructor @RequiredArgsConstructor
public class LGEvent extends Event{ public class LGEvent extends Event {
@Getter final LGGame game;
private static final HandlerList handlers = new HandlerList(); private static final HandlerList handlers = new HandlerList();
@Override @Getter
public HandlerList getHandlers() { final LGGame game;
return handlers;
}
public static HandlerList getHandlerList() { public static HandlerList getHandlerList() {
return handlers; return handlers;
} }
@Override
public HandlerList getHandlers() {
return handlers;
}
} }

View file

@ -1,22 +1,26 @@
package fr.leomelki.loupgarou.events; package fr.leomelki.loupgarou.events;
import java.util.List;
import org.bukkit.event.Cancellable;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.classes.LGWinType; import fr.leomelki.loupgarou.classes.LGWinType;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.bukkit.event.Cancellable;
public class LGGameEndEvent extends LGEvent implements Cancellable{ import java.util.List;
@Getter @Setter private boolean cancelled;
@Getter private final LGWinType winType; public class LGGameEndEvent extends LGEvent implements Cancellable {
@Getter private final List<LGPlayer> winners; @Getter
public LGGameEndEvent(LGGame game, LGWinType winType, List<LGPlayer> winners) { private final LGWinType winType;
super(game); @Getter
this.winType = winType; private final List<LGPlayer> winners;
this.winners = winners; @Getter
} @Setter
private boolean cancelled;
public LGGameEndEvent(LGGame game, LGWinType winType, List<LGPlayer> winners) {
super(game);
this.winType = winType;
this.winners = winners;
}
} }

View file

@ -4,12 +4,12 @@ import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import lombok.Getter; import lombok.Getter;
public class LGGameJoinEvent extends LGEvent{ public class LGGameJoinEvent extends LGEvent {
public LGGameJoinEvent(LGGame game, LGPlayer player) { @Getter
super(game);
this.player = player;
}
@Getter
final LGPlayer player; final LGPlayer player;
public LGGameJoinEvent(LGGame game, LGPlayer player) {
super(game);
this.player = player;
}
} }

View file

@ -1,15 +1,16 @@
package fr.leomelki.loupgarou.events; package fr.leomelki.loupgarou.events;
import org.bukkit.event.Cancellable;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.bukkit.event.Cancellable;
public class LGMayorVoteEvent extends LGEvent implements Cancellable{ public class LGMayorVoteEvent extends LGEvent implements Cancellable {
public LGMayorVoteEvent(LGGame game) { @Getter
super(game); @Setter
} private boolean cancelled;
@Getter @Setter private boolean cancelled; public LGMayorVoteEvent(LGGame game) {
super(game);
}
} }

View file

@ -1,15 +1,16 @@
package fr.leomelki.loupgarou.events; package fr.leomelki.loupgarou.events;
import org.bukkit.event.Cancellable;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.bukkit.event.Cancellable;
public class LGNightEndEvent extends LGEvent implements Cancellable{ public class LGNightEndEvent extends LGEvent implements Cancellable {
public LGNightEndEvent(LGGame game) { @Getter
super(game); @Setter
} private boolean cancelled;
@Getter @Setter private boolean cancelled; public LGNightEndEvent(LGGame game) {
super(game);
}
} }

View file

@ -1,23 +1,25 @@
package fr.leomelki.loupgarou.events; package fr.leomelki.loupgarou.events;
import org.bukkit.event.Cancellable;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason; import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.bukkit.event.Cancellable;
public class LGNightPlayerPreKilledEvent extends LGEvent implements Cancellable{ public class LGNightPlayerPreKilledEvent extends LGEvent implements Cancellable {
public LGNightPlayerPreKilledEvent(LGGame game, LGPlayer killed, Reason reason) { @Getter
super(game); private final LGPlayer killed;
this.killed = killed; @Getter
this.reason = reason; @Setter
} boolean cancelled;
@Getter
@Getter @Setter boolean cancelled; @Setter
private Reason reason;
@Getter private final LGPlayer killed; public LGNightPlayerPreKilledEvent(LGGame game, LGPlayer killed, Reason reason) {
@Getter @Setter private Reason reason; super(game);
this.killed = killed;
this.reason = reason;
}
} }

View file

@ -1,17 +1,18 @@
package fr.leomelki.loupgarou.events; package fr.leomelki.loupgarou.events;
import org.bukkit.event.Cancellable;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.bukkit.event.Cancellable;
public class LGNightStart extends LGEvent implements Cancellable{ public class LGNightStart extends LGEvent implements Cancellable {
public LGNightStart(LGGame game) { @Getter
super(game); @Setter
} boolean cancelled;
@Getter @Setter boolean cancelled; public LGNightStart(LGGame game) {
super(game);
}
} }

View file

@ -6,15 +6,17 @@ import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import lombok.Getter; import lombok.Getter;
public class LGPlayerGotKilledEvent extends LGEvent { public class LGPlayerGotKilledEvent extends LGEvent {
public LGPlayerGotKilledEvent(LGGame game, LGPlayer killed, Reason reason, boolean endGame) { @Getter
super(game); private final boolean endGame;
this.killed = killed; @Getter
this.reason = reason; private final LGPlayer killed;
this.endGame = endGame; @Getter
} private final Reason reason;
public LGPlayerGotKilledEvent(LGGame game, LGPlayer killed, Reason reason, boolean endGame) {
@Getter private final boolean endGame; super(game);
@Getter private final LGPlayer killed; this.killed = killed;
@Getter private final Reason reason; this.reason = reason;
this.endGame = endGame;
}
} }

View file

@ -1,47 +1,51 @@
package fr.leomelki.loupgarou.events; package fr.leomelki.loupgarou.events;
import org.bukkit.event.Cancellable;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.Setter; import lombok.Setter;
import org.bukkit.event.Cancellable;
public class LGPlayerKilledEvent extends LGEvent implements Cancellable{ public class LGPlayerKilledEvent extends LGEvent implements Cancellable {
public LGPlayerKilledEvent(LGGame game, LGPlayer killed, Reason reason) { @Getter
super(game); @Setter
this.killed = killed; boolean cancelled;
this.reason = reason; @Getter
} @Setter
private LGPlayer killed;
@Getter @Setter boolean cancelled; @Getter
@Setter
@Getter @Setter private LGPlayer killed; private Reason reason;
@Getter @Setter private Reason reason; public LGPlayerKilledEvent(LGGame game, LGPlayer killed, Reason reason) {
super(game);
this.killed = killed;
this.reason = reason;
}
@RequiredArgsConstructor @RequiredArgsConstructor
public enum Reason{ public enum Reason {
LOUP_GAROU("§7§l%s§4 est mort pendant la nuit"), LOUP_GAROU("§7§l%s§4 est mort pendant la nuit"),
GM_LOUP_GAROU("§7§l%s§4 est mort pendant la nuit"), GM_LOUP_GAROU("§7§l%s§4 est mort pendant la nuit"),
LOUP_BLANC(LOUP_GAROU.getMessage()), LOUP_BLANC(LOUP_GAROU.getMessage()),
SORCIERE(LOUP_GAROU.getMessage()), SORCIERE(LOUP_GAROU.getMessage()),
CHASSEUR_DE_VAMPIRE("§7§l%s§4 s'est fait purifier"), CHASSEUR_DE_VAMPIRE("§7§l%s§4 s'est fait purifier"),
VOTE("§7§l%s§4 a été victime du vote"), VOTE("§7§l%s§4 a été victime du vote"),
CHASSEUR("§7§l%s§4 est mort sur le coup"), CHASSEUR("§7§l%s§4 est mort sur le coup"),
DICTATOR("§7§l%s§4 a été désigné"), DICTATOR("§7§l%s§4 a été désigné"),
DICTATOR_SUICIDE("§7§l%s§4 s'est suicidé par culpabilité"), DICTATOR_SUICIDE("§7§l%s§4 s'est suicidé par culpabilité"),
DISCONNECTED("§7§l%s§4 est mort d'une déconnexion"), DISCONNECTED("§7§l%s§4 est mort d'une déconnexion"),
LOVE("§7§l%s§4 s'est suicidé par amour"), LOVE("§7§l%s§4 s'est suicidé par amour"),
BOUFFON("§7§l%s§4 est mort de peur"), BOUFFON("§7§l%s§4 est mort de peur"),
ASSASSIN("§7§l%s§4 s'est fait poignarder"), ASSASSIN("§7§l%s§4 s'est fait poignarder"),
PYROMANE("§7§l%s§4 est parti en fumée"), PYROMANE("§7§l%s§4 est parti en fumée"),
PIRATE("§7§l%s§4 était l'otage"), PIRATE("§7§l%s§4 était l'otage"),
FAUCHEUR("§7§l%s§4 a égaré son âme"), FAUCHEUR("§7§l%s§4 a égaré son âme"),
DONT_DIE("§7§l%s§4 est mort pour rien"); DONT_DIE("§7§l%s§4 est mort pour rien");
@Getter private final String message; @Getter
} private final String message;
}
} }

View file

@ -1,15 +1,16 @@
package fr.leomelki.loupgarou.events; package fr.leomelki.loupgarou.events;
import org.bukkit.event.Cancellable;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.bukkit.event.Cancellable;
public class LGPreDayStartEvent extends LGEvent implements Cancellable{ public class LGPreDayStartEvent extends LGEvent implements Cancellable {
public LGPreDayStartEvent(LGGame game) { @Getter
super(game); @Setter
} private boolean cancelled;
@Getter @Setter private boolean cancelled; public LGPreDayStartEvent(LGGame game) {
super(game);
}
} }

View file

@ -1,18 +1,20 @@
package fr.leomelki.loupgarou.events; package fr.leomelki.loupgarou.events;
import org.bukkit.event.Cancellable;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.bukkit.event.Cancellable;
public class LGPyromaneGasoilEvent extends LGEvent implements Cancellable{ public class LGPyromaneGasoilEvent extends LGEvent implements Cancellable {
public LGPyromaneGasoilEvent(LGGame game, LGPlayer player) { @Getter
super(game); @Setter
this.player = player; private boolean cancelled;
} @Getter
@Setter
@Getter @Setter private boolean cancelled; private LGPlayer player;
@Getter @Setter private LGPlayer player; public LGPyromaneGasoilEvent(LGGame game, LGPlayer player) {
super(game);
this.player = player;
}
} }

View file

@ -4,12 +4,13 @@ import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.roles.Role; import fr.leomelki.loupgarou.roles.Role;
import lombok.Getter; import lombok.Getter;
public class LGRoleTurnEndEvent extends LGEvent{ public class LGRoleTurnEndEvent extends LGEvent {
public LGRoleTurnEndEvent(LGGame game, Role newRole, Role previousRole) { @Getter
super(game); private final Role newRole, previousRole;
this.newRole = newRole;
this.previousRole = previousRole;
}
@Getter private final Role newRole, previousRole; public LGRoleTurnEndEvent(LGGame game, Role newRole, Role previousRole) {
super(game);
this.newRole = newRole;
this.previousRole = previousRole;
}
} }

View file

@ -1,7 +1,6 @@
package fr.leomelki.loupgarou.events; package fr.leomelki.loupgarou.events;
import com.comphenix.protocol.wrappers.WrappedGameProfile; import com.comphenix.protocol.wrappers.WrappedGameProfile;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import lombok.Getter; import lombok.Getter;
@ -9,13 +8,17 @@ import lombok.Setter;
public class LGSkinLoadEvent extends LGEvent { public class LGSkinLoadEvent extends LGEvent {
@Getter private final LGPlayer player, to; @Getter
@Getter @Setter private WrappedGameProfile profile; private final LGPlayer player, to;
public LGSkinLoadEvent(LGGame game, LGPlayer player, LGPlayer to, WrappedGameProfile profile) { @Getter
super(game); @Setter
this.player = player; private WrappedGameProfile profile;
this.to = to;
this.profile = profile; public LGSkinLoadEvent(LGGame game, LGPlayer player, LGPlayer to, WrappedGameProfile profile) {
} super(game);
this.player = player;
this.to = to;
this.profile = profile;
}
} }

View file

@ -6,13 +6,17 @@ import lombok.Getter;
import lombok.Setter; import lombok.Setter;
public class LGUpdatePrefixEvent extends LGEvent { public class LGUpdatePrefixEvent extends LGEvent {
@Getter @Setter private String prefix; @Getter
@Getter private final LGPlayer player, to; private final LGPlayer player, to;
public LGUpdatePrefixEvent(LGGame game, LGPlayer player, LGPlayer to, String prefix) { @Getter
super(game); @Setter
this.player = player; private String prefix;
this.prefix = prefix;
this.to = to; public LGUpdatePrefixEvent(LGGame game, LGPlayer player, LGPlayer to, String prefix) {
} super(game);
this.player = player;
this.prefix = prefix;
this.to = to;
}
} }

View file

@ -5,12 +5,15 @@ import fr.leomelki.loupgarou.classes.LGPlayer;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
public class LGVampiredEvent extends LGEvent{ public class LGVampiredEvent extends LGEvent {
public LGVampiredEvent(LGGame game, LGPlayer player) { @Getter
super(game); @Setter
this.player = player; private boolean immuned, protect;
} @Getter
@Setter
@Getter @Setter private boolean immuned, protect; private LGPlayer player;
@Getter @Setter private LGPlayer player; public LGVampiredEvent(LGGame game, LGPlayer player) {
super(game);
this.player = player;
}
} }

View file

@ -1,15 +1,16 @@
package fr.leomelki.loupgarou.events; package fr.leomelki.loupgarou.events;
import org.bukkit.event.Cancellable;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.bukkit.event.Cancellable;
public class LGVoteEvent extends LGEvent implements Cancellable{ public class LGVoteEvent extends LGEvent implements Cancellable {
public LGVoteEvent(LGGame game) { @Getter
super(game); @Setter
} private boolean cancelled;
@Getter @Setter private boolean cancelled; public LGVoteEvent(LGGame game) {
super(game);
}
} }

View file

@ -1,26 +1,25 @@
package fr.leomelki.loupgarou.events; package fr.leomelki.loupgarou.events;
import java.util.ArrayList;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.classes.LGVote; import fr.leomelki.loupgarou.classes.LGVote;
import lombok.Getter; import lombok.Getter;
public class LGVoteLeaderChange extends LGEvent{ import java.util.ArrayList;
public LGVoteLeaderChange(LGGame game, LGVote vote, ArrayList<LGPlayer> latest, ArrayList<LGPlayer> now) { public class LGVoteLeaderChange extends LGEvent {
super(game);
this.latest = latest;
this.now = now;
this.vote = vote;
}
@Getter @Getter
final ArrayList<LGPlayer> latest; final ArrayList<LGPlayer> latest;
@Getter @Getter
final ArrayList<LGPlayer> now; final ArrayList<LGPlayer> now;
@Getter @Getter
final LGVote vote; final LGVote vote;
public LGVoteLeaderChange(LGGame game, LGVote vote, ArrayList<LGPlayer> latest, ArrayList<LGPlayer> now) {
super(game);
this.latest = latest;
this.now = now;
this.vote = vote;
}
} }

View file

@ -1,6 +1,7 @@
package fr.leomelki.loupgarou.listeners; package fr.leomelki.loupgarou.listeners;
import fr.leomelki.loupgarou.MainLg; import fr.leomelki.loupgarou.MainLg;
import fr.leomelki.loupgarou.classes.LGPlayer;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -15,61 +16,69 @@ import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.PlayerSwapHandItemsEvent; import org.bukkit.event.player.PlayerSwapHandItemsEvent;
import org.bukkit.event.weather.WeatherChangeEvent; import org.bukkit.event.weather.WeatherChangeEvent;
import fr.leomelki.loupgarou.classes.LGPlayer; public class CancelListener implements Listener {
private final MainLg plugin;
public class CancelListener implements Listener{ public CancelListener(MainLg mainLg) {
private final MainLg plugin; this.plugin = mainLg;
}
public CancelListener (MainLg mainLg) { @EventHandler
this.plugin = mainLg; public void onPluie(WeatherChangeEvent e) {
} e.setCancelled(true);
@EventHandler }
public void onPluie(WeatherChangeEvent e) {
e.setCancelled(true); @EventHandler
} public void onMove(PlayerMoveEvent e) {
@EventHandler LGPlayer lgp = LGPlayer.thePlayer(plugin, e.getPlayer());
public void onMove(PlayerMoveEvent e) { if (lgp.getGame() != null && lgp.getGame().isStarted() && e.getFrom().distanceSquared(e.getTo()) > 0.001)
LGPlayer lgp = LGPlayer.thePlayer(plugin, e.getPlayer()); e.setTo(e.getFrom());
if(lgp.getGame() != null && lgp.getGame().isStarted() && e.getFrom().distanceSquared(e.getTo()) > 0.001) }
e.setTo(e.getFrom());
} @EventHandler
@EventHandler public void onDamage(EntityDamageEvent e) {
public void onDamage(EntityDamageEvent e) { e.setCancelled(true);
e.setCancelled(true); }
}
@EventHandler @EventHandler
public void onFood(FoodLevelChangeEvent e) { public void onFood(FoodLevelChangeEvent e) {
e.setFoodLevel(6); e.setFoodLevel(6);
} }
@EventHandler
public void onRespawn(PlayerRespawnEvent e) { @EventHandler
e.setRespawnLocation(e.getPlayer().getLocation()); public void onRespawn(PlayerRespawnEvent e) {
} e.setRespawnLocation(e.getPlayer().getLocation());
@EventHandler }
public void onRespawn(PlayerDeathEvent e) {
e.setDeathMessage(""); @EventHandler
e.setKeepInventory(true); public void onRespawn(PlayerDeathEvent e) {
} e.setDeathMessage("");
/* @EventHandler e.setKeepInventory(true);
public void onAchievement(PlayerAchievementAwardedEvent e) { }
e.setCancelled(true);
}*/ /* @EventHandler
@EventHandler public void onAchievement(PlayerAchievementAwardedEvent e) {
public void onEntitySpawn(EntitySpawnEvent e) { e.setCancelled(true);
e.setCancelled(true); }*/
} @EventHandler
@EventHandler public void onEntitySpawn(EntitySpawnEvent e) {
public void onDrop(PlayerDropItemEvent e) { e.setCancelled(true);
e.setCancelled(true); }
}
@EventHandler @EventHandler
public void onClickInventory(InventoryClickEvent e) { public void onDrop(PlayerDropItemEvent e) {
if(LGPlayer.thePlayer(plugin, (Player)e.getWhoClicked()).getGame() != null) e.setCancelled(true);
e.setCancelled(true); }
}
@EventHandler @EventHandler
public void onClickInventory(PlayerSwapHandItemsEvent e) { public void onClickInventory(InventoryClickEvent e) {
if(LGPlayer.thePlayer(plugin, e.getPlayer()).getGame() != null) if (LGPlayer.thePlayer(plugin, (Player) e.getWhoClicked()).getGame() != null)
e.setCancelled(true); e.setCancelled(true);
} }
@EventHandler
public void onClickInventory(PlayerSwapHandItemsEvent e) {
if (LGPlayer.thePlayer(plugin, e.getPlayer()).getGame() != null)
e.setCancelled(true);
}
} }

View file

@ -1,27 +1,26 @@
package fr.leomelki.loupgarou.listeners; package fr.leomelki.loupgarou.listeners;
import fr.leomelki.loupgarou.MainLg; import fr.leomelki.loupgarou.MainLg;
import fr.leomelki.loupgarou.classes.LGPlayer;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.AsyncPlayerChatEvent;
import fr.leomelki.loupgarou.classes.LGPlayer; public class ChatListener implements Listener {
public class ChatListener implements Listener{ private final MainLg plugin;
private final MainLg plugin; public ChatListener(MainLg mainLg) {
this.plugin = mainLg;
}
public ChatListener(MainLg mainLg) { @EventHandler(priority = EventPriority.HIGHEST)
this.plugin = mainLg; public void onChat(AsyncPlayerChatEvent e) {
} if (!e.isCancelled()) {
LGPlayer player = LGPlayer.thePlayer(plugin, e.getPlayer());
@EventHandler(priority = EventPriority.HIGHEST) player.onChat(e.getMessage());
public void onChat(AsyncPlayerChatEvent e) { e.setCancelled(true);
if(!e.isCancelled()) { }
LGPlayer player = LGPlayer.thePlayer(plugin, e.getPlayer()); }
player.onChat(e.getMessage());
e.setCancelled(true);
}
}
} }

View file

@ -1,7 +1,10 @@
package fr.leomelki.loupgarou.listeners; package fr.leomelki.loupgarou.listeners;
import java.util.Collections; import com.comphenix.protocol.wrappers.WrappedChatComponent;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerScoreboardTeam;
import fr.leomelki.loupgarou.MainLg;
import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -13,81 +16,78 @@ import org.bukkit.event.player.PlayerResourcePackStatusEvent;
import org.bukkit.event.player.PlayerResourcePackStatusEvent.Status; import org.bukkit.event.player.PlayerResourcePackStatusEvent.Status;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
import com.comphenix.protocol.wrappers.WrappedChatComponent; import java.util.Collections;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerScoreboardTeam; public class JoinListener implements Listener {
import fr.leomelki.loupgarou.MainLg; private final MainLg plugin;
import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
public class JoinListener implements Listener{ public JoinListener(MainLg mainLg) {
private final MainLg plugin; this.plugin = mainLg;
}
public JoinListener(MainLg mainLg) { @EventHandler
this.plugin = mainLg; public void onJoin(PlayerJoinEvent e) {
} Player p = e.getPlayer();
@EventHandler WrapperPlayServerScoreboardTeam myTeam = new WrapperPlayServerScoreboardTeam();
public void onJoin(PlayerJoinEvent e) { myTeam.setName(p.getName());
Player p = e.getPlayer(); myTeam.setPrefix(WrappedChatComponent.fromText(""));
myTeam.setPlayers(Collections.singletonList(p.getName()));
myTeam.setMode(0);
boolean noSpec = p.getGameMode() != GameMode.SPECTATOR;
for (Player player : Bukkit.getOnlinePlayers())
if (player != p) {
if (player.getGameMode() != GameMode.SPECTATOR)
player.hidePlayer(plugin, p);
WrapperPlayServerScoreboardTeam team = new WrapperPlayServerScoreboardTeam();
team.setName(player.getName());
team.setPrefix(WrappedChatComponent.fromText(""));
team.setPlayers(Collections.singletonList(player.getName()));
team.setMode(0);
WrapperPlayServerScoreboardTeam myTeam = new WrapperPlayServerScoreboardTeam(); team.sendPacket(p);
myTeam.setName(p.getName()); myTeam.sendPacket(player);
myTeam.setPrefix(WrappedChatComponent.fromText("")); }
myTeam.setPlayers(Collections.singletonList(p.getName())); p.setFoodLevel(6);
myTeam.setMode(0); if (e.getJoinMessage() == null || !e.getJoinMessage().equals("joinall")) {
boolean noSpec = p.getGameMode() != GameMode.SPECTATOR; //p.getPlayer().setResourcePack("http://leomelki.fr/mcgames/ressourcepacks/v32/loup_garou.zip");
for (Player player : Bukkit.getOnlinePlayers()) } else {
if (player != p) { LGPlayer lgp = LGPlayer.thePlayer(plugin, e.getPlayer());
if (player.getGameMode() != GameMode.SPECTATOR) lgp.showView();
player.hidePlayer(plugin, p); lgp.join(MainLg.getInstance().getCurrentGame());
WrapperPlayServerScoreboardTeam team = new WrapperPlayServerScoreboardTeam(); }
team.setName(player.getName()); if (noSpec)
team.setPrefix(WrappedChatComponent.fromText("")); p.setGameMode(GameMode.ADVENTURE);
team.setPlayers(Collections.singletonList(player.getName())); e.setJoinMessage("");
team.setMode(0); p.removePotionEffect(PotionEffectType.JUMP);
p.removePotionEffect(PotionEffectType.INVISIBILITY);
p.setWalkSpeed(0.2f);
}
team.sendPacket(p); @EventHandler
myTeam.sendPacket(player); public void onResoucePack(PlayerResourcePackStatusEvent e) {
} if (e.getStatus() == Status.SUCCESSFULLY_LOADED) {
p.setFoodLevel(6); Player p = e.getPlayer();
if (e.getJoinMessage() == null || !e.getJoinMessage().equals("joinall")) { LGPlayer lgp = LGPlayer.thePlayer(plugin, p);
//p.getPlayer().setResourcePack("http://leomelki.fr/mcgames/ressourcepacks/v32/loup_garou.zip"); lgp.showView();
} else { lgp.join(MainLg.getInstance().getCurrentGame());
LGPlayer lgp = LGPlayer.thePlayer(plugin, e.getPlayer()); } else if (e.getStatus() == Status.DECLINED || e.getStatus() == Status.FAILED_DOWNLOAD)
lgp.showView(); e.getPlayer().kickPlayer(MainLg.getPrefix() + "§cIl vous faut le resourcepack pour jouer ! (" + e.getStatus() + ")");
lgp.join(MainLg.getInstance().getCurrentGame()); }
}
if(noSpec) @EventHandler
p.setGameMode(GameMode.ADVENTURE); public void onLeave(PlayerQuitEvent e) {
e.setJoinMessage(""); Player p = e.getPlayer();
p.removePotionEffect(PotionEffectType.JUMP); LGPlayer lgp = LGPlayer.thePlayer(plugin, p);
p.removePotionEffect(PotionEffectType.INVISIBILITY); if (lgp.getGame() != null) {
p.setWalkSpeed(0.2f); lgp.leaveChat();
} if (lgp.getRole() != null && !lgp.isDead())
@EventHandler lgp.getGame().kill(lgp, Reason.DISCONNECTED, true);
public void onResoucePack(PlayerResourcePackStatusEvent e) { lgp.getGame().getInGame().remove(lgp);
if (e.getStatus() == Status.SUCCESSFULLY_LOADED) { lgp.getGame().checkLeave();
Player p = e.getPlayer(); }
LGPlayer lgp = LGPlayer.thePlayer(plugin, p); LGPlayer.removePlayer(p);
lgp.showView(); lgp.remove();
lgp.join(MainLg.getInstance().getCurrentGame()); }
} else if(e.getStatus() == Status.DECLINED || e.getStatus() == Status.FAILED_DOWNLOAD)
e.getPlayer().kickPlayer(MainLg.getPrefix()+"§cIl vous faut le resourcepack pour jouer ! ("+e.getStatus()+")");
}
@EventHandler
public void onLeave(PlayerQuitEvent e) {
Player p = e.getPlayer();
LGPlayer lgp = LGPlayer.thePlayer(plugin, p);
if(lgp.getGame() != null) {
lgp.leaveChat();
if(lgp.getRole() != null && !lgp.isDead())
lgp.getGame().kill(lgp, Reason.DISCONNECTED, true);
lgp.getGame().getInGame().remove(lgp);
lgp.getGame().checkLeave();
}
LGPlayer.removePlayer(p);
lgp.remove();
}
} }

View file

@ -1,30 +1,28 @@
package fr.leomelki.loupgarou.listeners; package fr.leomelki.loupgarou.listeners;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import com.comphenix.protocol.wrappers.EnumWrappers.ScoreboardAction; import com.comphenix.protocol.wrappers.EnumWrappers.ScoreboardAction;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerScoreboardScore; import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerScoreboardScore;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerScoreboardTeam; import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerScoreboardTeam;
import fr.leomelki.loupgarou.events.LGGameJoinEvent; import fr.leomelki.loupgarou.events.LGGameJoinEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class LoupGarouListener implements Listener { public class LoupGarouListener implements Listener {
@EventHandler @EventHandler
public void onGameJoin(LGGameJoinEvent e) { public void onGameJoin(LGGameJoinEvent e) {
//Tous les loups-garous //Tous les loups-garous
WrapperPlayServerScoreboardTeam teamDelete = new WrapperPlayServerScoreboardTeam(); WrapperPlayServerScoreboardTeam teamDelete = new WrapperPlayServerScoreboardTeam();
teamDelete.setMode(1); teamDelete.setMode(1);
teamDelete.setName("loup_garou_list"); teamDelete.setName("loup_garou_list");
teamDelete.sendPacket(e.getPlayer().getPlayer()); teamDelete.sendPacket(e.getPlayer().getPlayer());
//Loup-Garou noir //Loup-Garou noir
WrapperPlayServerScoreboardScore score = new WrapperPlayServerScoreboardScore(); WrapperPlayServerScoreboardScore score = new WrapperPlayServerScoreboardScore();
score.setObjectiveName("lg_scoreboard"); score.setObjectiveName("lg_scoreboard");
score.setValue(0); score.setValue(0);
score.setScoreName("été"); score.setScoreName("été");
score.setScoreboardAction(ScoreboardAction.REMOVE); score.setScoreboardAction(ScoreboardAction.REMOVE);
score.sendPacket(e.getPlayer().getPlayer()); score.sendPacket(e.getPlayer().getPlayer());
} }
} }

View file

@ -1,27 +1,28 @@
package fr.leomelki.loupgarou.listeners; package fr.leomelki.loupgarou.listeners;
import fr.leomelki.loupgarou.MainLg; import fr.leomelki.loupgarou.MainLg;
import fr.leomelki.loupgarou.classes.LGPlayer;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.player.PlayerAnimationEvent; import org.bukkit.event.player.PlayerAnimationEvent;
import org.bukkit.event.player.PlayerAnimationType; import org.bukkit.event.player.PlayerAnimationType;
import fr.leomelki.loupgarou.classes.LGPlayer; public class VoteListener implements Listener {
private final MainLg plugin;
public class VoteListener implements Listener{ public VoteListener(MainLg mainLg) {
private final MainLg plugin; this.plugin = mainLg;
}
public VoteListener(MainLg mainLg) { @EventHandler
this.plugin = mainLg; public void onClick(PlayerAnimationEvent e) {
} if (e.getAnimationType() == PlayerAnimationType.ARM_SWING)
@EventHandler LGPlayer.thePlayer(plugin, e.getPlayer()).chooseAction();
public void onClick(PlayerAnimationEvent e) { }
if(e.getAnimationType() == PlayerAnimationType.ARM_SWING)
LGPlayer.thePlayer(plugin, e.getPlayer()).chooseAction(); @EventHandler
} public void onBreak(BlockBreakEvent e) {
@EventHandler e.setCancelled(true);
public void onBreak(BlockBreakEvent e) { }
e.setCancelled(true);
}
} }

View file

@ -1,116 +1,124 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import java.util.ArrayList;
import org.bukkit.event.EventHandler;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.classes.LGWinType; import fr.leomelki.loupgarou.classes.LGWinType;
import fr.leomelki.loupgarou.events.LGDayEndEvent; import fr.leomelki.loupgarou.events.*;
import fr.leomelki.loupgarou.events.LGEndCheckEvent;
import fr.leomelki.loupgarou.events.LGGameEndEvent;
import fr.leomelki.loupgarou.events.LGPlayerGotKilledEvent;
import fr.leomelki.loupgarou.events.LGVoteEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason; import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import org.bukkit.event.EventHandler;
public class RAnge extends Role{ import java.util.ArrayList;
public RAnge(LGGame game) {
super(game);
}
@Override
public RoleType getType() {
return RoleType.NEUTRAL;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@Override
public String getName() {
return "§d§lAnge";
}
@Override
public String getFriendlyName() {
return "de l'"+getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes si tu remplis ton objectif";
}
@Override
public String getDescription() {
return "Tu es §d§lNeutre§f et tu gagnes si tu remplis ton objectif. Ton objectif est d'être éliminé par le village lors du premier vote de jour. Si tu réussis, tu gagnes la partie. Sinon, tu deviens un §a§lVillageois§f.";
}
@Override
public String getTask() {
return "";
}
@Override
public String getBroadcastedTask() {
return "";
}
@Override
public int getTimeout() {
return -1;
}
@EventHandler
public void onVoteStart(LGVoteEvent e) {
if(e.getGame() == getGame()) {
night = getGame().getNight();
vote = true;
for(LGPlayer lgp : getPlayers())
if(!lgp.isDead() && lgp.isRoleActive())
lgp.sendMessage("§9§oFais en sorte que les autres votent contre toi !");
}
}
boolean vote;
@EventHandler
public void onDayEnd(LGDayEndEvent e) {
if(e.getGame() == getGame()) {
if(getPlayers().size() > 0 && getGame().getNight() == night+1 && vote) {
Role villageois = null;
for(Role role : getGame().getRoles()) {
if(role instanceof RVillageois)
villageois = role;
}
if(villageois == null) public class RAnge extends Role {
getGame().getRoles().add(villageois = new RVillageois(getGame())); final ArrayList<LGPlayer> winners = new ArrayList<>();
boolean vote;
int night = 1;
for(LGPlayer lgp : getPlayers()) { public RAnge(LGGame game) {
if(lgp.isRoleActive()) super(game);
lgp.sendMessage("§4§oTu as échoué, tu deviens §a§l§oVillageois§4§o..."); }
lgp.setRole(villageois);
villageois.join(lgp);
}
getPlayers().clear(); @Override
getGame().updateRoleScoreboard(); public RoleType getType() {
} return RoleType.NEUTRAL;
vote = false; }
}
}
final ArrayList<LGPlayer> winners = new ArrayList<>();
int night = 1;
@EventHandler
public void onDeath(LGPlayerGotKilledEvent e) {
if(e.getGame() == getGame())
if(e.getReason() == Reason.VOTE && e.getKilled().getRole() == this && getGame().getNight() == night && e.getKilled().isRoleActive())
winners.add(e.getKilled());
}
@EventHandler @Override
public void onWinCheck(LGEndCheckEvent e) { public RoleWinType getWinType() {
if(e.getGame() == getGame()) return RoleWinType.VILLAGE;
if(winners.size() > 0) }
e.setWinType(winners.size() == 1 && winners.get(0).getCache().has("inlove") ? LGWinType.COUPLE : LGWinType.ANGE);
}
@EventHandler @Override
public void onWin(LGGameEndEvent e) { public String getName() {
if(e.getGame() == getGame()) return "§d§lAnge";
if(e.getWinType() == LGWinType.ANGE) }
e.getWinners().addAll(winners);
} @Override
public String getFriendlyName() {
return "de l'" + getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes si tu remplis ton objectif";
}
@Override
public String getDescription() {
return "Tu es §d§lNeutre§f et tu gagnes si tu remplis ton objectif. Ton objectif est d'être éliminé par le village lors du premier vote de jour. Si tu réussis, tu gagnes la partie. Sinon, tu deviens un §a§lVillageois§f.";
}
@Override
public String getTask() {
return "";
}
@Override
public String getBroadcastedTask() {
return "";
}
@Override
public int getTimeout() {
return -1;
}
@EventHandler
public void onVoteStart(LGVoteEvent e) {
if (e.getGame() == getGame()) {
night = getGame().getNight();
vote = true;
for (LGPlayer lgp : getPlayers())
if (!lgp.isDead() && lgp.isRoleActive())
lgp.sendMessage("§9§oFais en sorte que les autres votent contre toi !");
}
}
@EventHandler
public void onDayEnd(LGDayEndEvent e) {
if (e.getGame() == getGame()) {
if (getPlayers().size() > 0 && getGame().getNight() == night + 1 && vote) {
Role villageois = null;
for (Role role : getGame().getRoles()) {
if (role instanceof RVillageois)
villageois = role;
}
if (villageois == null)
getGame().getRoles().add(villageois = new RVillageois(getGame()));
for (LGPlayer lgp : getPlayers()) {
if (lgp.isRoleActive())
lgp.sendMessage("§4§oTu as échoué, tu deviens §a§l§oVillageois§4§o...");
lgp.setRole(villageois);
villageois.join(lgp);
}
getPlayers().clear();
getGame().updateRoleScoreboard();
}
vote = false;
}
}
@EventHandler
public void onDeath(LGPlayerGotKilledEvent e) {
if (e.getGame() == getGame())
if (e.getReason() == Reason.VOTE && e.getKilled().getRole() == this && getGame().getNight() == night && e.getKilled().isRoleActive())
winners.add(e.getKilled());
}
@EventHandler
public void onWinCheck(LGEndCheckEvent e) {
if (e.getGame() == getGame())
if (winners.size() > 0)
e.setWinType(winners.size() == 1 && winners.get(0).getCache().has("inlove") ? LGWinType.COUPLE : LGWinType.ANGE);
}
@EventHandler
public void onWin(LGGameEndEvent e) {
if (e.getGame() == getGame())
if (e.getWinType() == LGWinType.ANGE)
e.getWinners().addAll(winners);
}
} }

View file

@ -1,151 +1,154 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.classes.LGWinType; import fr.leomelki.loupgarou.classes.LGWinType;
import fr.leomelki.loupgarou.events.LGEndCheckEvent; import fr.leomelki.loupgarou.events.*;
import fr.leomelki.loupgarou.events.LGGameEndEvent;
import fr.leomelki.loupgarou.events.LGNightEndEvent;
import fr.leomelki.loupgarou.events.LGNightPlayerPreKilledEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason; import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import fr.leomelki.loupgarou.events.LGPyromaneGasoilEvent; import org.bukkit.event.EventHandler;
import fr.leomelki.loupgarou.events.LGRoleTurnEndEvent; import org.bukkit.event.EventPriority;
import fr.leomelki.loupgarou.events.LGVampiredEvent;
public class RAssassin extends Role{ public class RAssassin extends Role {
public RAssassin(LGGame game) { public RAssassin(LGGame game) {
super(game); super(game);
} }
@Override
public RoleType getType() {
return RoleType.NEUTRAL;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.SEUL;
}
@Override
public String getName() {
return "§1§lAssassin";
}
@Override
public String getFriendlyName() {
return "de l'"+getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes §7§lSEUL";
}
@Override
public String getDescription() {
return "Tu gagnes §7§lSEUL§f. Chaque nuit, tu peux choisir un joueur à éliminer. Tu es immunisé contre l'attaque des §c§lLoups§f.";
}
@Override
public String getTask() {
return "Choisis un joueur à éliminer.";
}
@Override
public String getBroadcastedTask() {
return "L'"+getName()+"§9 ne controle plus ses pulsions...";
}
@Override
public int getTimeout() {
return 15;
}
@Override @Override
protected void onNightTurn(LGPlayer player, Runnable callback) { public RoleType getType() {
player.showView(); return RoleType.NEUTRAL;
}
player.choose(choosen -> { @Override
if(choosen != null && choosen != player) { public RoleWinType getWinType() {
getGame().kill(choosen, Reason.ASSASSIN); return RoleWinType.SEUL;
player.sendActionBarMessage("§e§l"+choosen.getName()+"§6 va mourir"); }
player.sendMessage("§6Tu as choisi de tuer §7§l"+choosen.getName()+"§6.");
player.stopChoosing();
player.hideView();
callback.run();
}
});
}
@EventHandler @Override
public void onKill(LGNightPlayerPreKilledEvent e) { public String getName() {
if(e.getKilled().getRole() == this && e.getReason() == Reason.LOUP_GAROU || e.getReason() == Reason.GM_LOUP_GAROU && e.getKilled().isRoleActive()) {//Les assassins ne peuvent pas mourir la nuit ! return "§1§lAssassin";
e.setReason(Reason.DONT_DIE); }
e.getKilled().getCache().set("assassin_protected", true);
}
}
@EventHandler @Override
public void onTour(LGRoleTurnEndEvent e) { public String getFriendlyName() {
if(e.getGame() == getGame()) { return "de l'" + getName();
if(e.getPreviousRole() instanceof RLoupGarou) { }
for(LGPlayer lgp : getGame().getAlive())
if(lgp.getCache().getBoolean("assassin_protected")) {
for(LGPlayer l : getGame().getInGame())
if(l.getRoleType() == RoleType.LOUP_GAROU)
l.sendMessage("§cVotre cible est immunisée.");
}
}else if(e.getPreviousRole() instanceof RGrandMechantLoup) {
for(LGPlayer lgp : getGame().getAlive())
if(lgp.getCache().getBoolean("assassin_protected")) {
for(LGPlayer l : e.getPreviousRole().getPlayers())
l.sendMessage("§cVotre cible est immunisée.");
}
}
}
}
@EventHandler @Override
public void onPyroGasoil(LGPyromaneGasoilEvent e) { public String getShortDescription() {
if(e.getPlayer().getRole() == this && e.getPlayer().isRoleActive()) return "Tu gagnes §7§lSEUL";
e.setCancelled(true); }
}
@EventHandler
public void onVampired(LGVampiredEvent e) {
if(e.getPlayer().getRole() == this && e.getPlayer().isRoleActive())
e.setImmuned(true);
}
@EventHandler @Override
public void onDayStart(LGNightEndEvent e) { public String getDescription() {
if(e.getGame() == getGame()) { return "Tu gagnes §7§lSEUL§f. Chaque nuit, tu peux choisir un joueur à éliminer. Tu es immunisé contre l'attaque des §c§lLoups§f.";
for(LGPlayer lgp : getGame().getAlive()) }
if(lgp.getCache().getBoolean("assassin_protected"))
lgp.getCache().remove("assassin_protected");
}
}
@EventHandler @Override
public void onEndgameCheck(LGEndCheckEvent e) { public String getTask() {
if(e.getGame() == getGame() && e.getWinType() == LGWinType.SOLO) { return "Choisis un joueur à éliminer.";
if(getPlayers().size() > 0) { }
if(getPlayers().size() > 1)
for(LGPlayer lgp : getPlayers())
if(!lgp.isRoleActive())
return;
e.setWinType(LGWinType.ASSASSIN);
}
}
}
@EventHandler(priority = EventPriority.HIGHEST) @Override
public void onEndGame(LGGameEndEvent e) { public String getBroadcastedTask() {
if(e.getWinType() == LGWinType.ASSASSIN) { return "L'" + getName() + "§9 ne controle plus ses pulsions...";
e.getWinners().clear(); }
e.getWinners().addAll(getPlayers());
}
}
@Override @Override
protected void onNightTurnTimeout(LGPlayer player) { public int getTimeout() {
player.stopChoosing(); return 15;
player.hideView(); }
//player.sendTitle("§cVous n'avez regardé aucun rôle", "§4Vous avez mis trop de temps à vous décider...", 80);
//player.sendMessage("§cVous n'avez pas utilisé votre pouvoir cette nuit."); @Override
} protected void onNightTurn(LGPlayer player, Runnable callback) {
player.showView();
player.choose(choosen -> {
if (choosen != null && choosen != player) {
getGame().kill(choosen, Reason.ASSASSIN);
player.sendActionBarMessage("§e§l" + choosen.getName() + "§6 va mourir");
player.sendMessage("§6Tu as choisi de tuer §7§l" + choosen.getName() + "§6.");
player.stopChoosing();
player.hideView();
callback.run();
}
});
}
@EventHandler
public void onKill(LGNightPlayerPreKilledEvent e) {
if (e.getKilled().getRole() == this && e.getReason() == Reason.LOUP_GAROU || e.getReason() == Reason.GM_LOUP_GAROU && e.getKilled().isRoleActive()) {//Les assassins ne peuvent pas mourir la nuit !
e.setReason(Reason.DONT_DIE);
e.getKilled().getCache().set("assassin_protected", true);
}
}
@EventHandler
public void onTour(LGRoleTurnEndEvent e) {
if (e.getGame() == getGame()) {
if (e.getPreviousRole() instanceof RLoupGarou) {
for (LGPlayer lgp : getGame().getAlive())
if (lgp.getCache().getBoolean("assassin_protected")) {
for (LGPlayer l : getGame().getInGame())
if (l.getRoleType() == RoleType.LOUP_GAROU)
l.sendMessage("§cVotre cible est immunisée.");
}
} else if (e.getPreviousRole() instanceof RGrandMechantLoup) {
for (LGPlayer lgp : getGame().getAlive())
if (lgp.getCache().getBoolean("assassin_protected")) {
for (LGPlayer l : e.getPreviousRole().getPlayers())
l.sendMessage("§cVotre cible est immunisée.");
}
}
}
}
@EventHandler
public void onPyroGasoil(LGPyromaneGasoilEvent e) {
if (e.getPlayer().getRole() == this && e.getPlayer().isRoleActive())
e.setCancelled(true);
}
@EventHandler
public void onVampired(LGVampiredEvent e) {
if (e.getPlayer().getRole() == this && e.getPlayer().isRoleActive())
e.setImmuned(true);
}
@EventHandler
public void onDayStart(LGNightEndEvent e) {
if (e.getGame() == getGame()) {
for (LGPlayer lgp : getGame().getAlive())
if (lgp.getCache().getBoolean("assassin_protected"))
lgp.getCache().remove("assassin_protected");
}
}
@EventHandler
public void onEndgameCheck(LGEndCheckEvent e) {
if (e.getGame() == getGame() && e.getWinType() == LGWinType.SOLO) {
if (getPlayers().size() > 0) {
if (getPlayers().size() > 1)
for (LGPlayer lgp : getPlayers())
if (!lgp.isRoleActive())
return;
e.setWinType(LGWinType.ASSASSIN);
}
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onEndGame(LGGameEndEvent e) {
if (e.getWinType() == LGWinType.ASSASSIN) {
e.getWinners().clear();
e.getWinners().addAll(getPlayers());
}
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.stopChoosing();
player.hideView();
//player.sendTitle("§cVous n'avez regardé aucun rôle", "§4Vous avez mis trop de temps à vous décider...", 80);
//player.sendMessage("§cVous n'avez pas utilisé votre pouvoir cette nuit.");
}
} }

View file

@ -1,148 +1,158 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import java.util.ArrayList;
import java.util.List;
import java.util.StringJoiner;
import org.bukkit.event.EventHandler;
import org.bukkit.scheduler.BukkitRunnable;
import fr.leomelki.loupgarou.MainLg; import fr.leomelki.loupgarou.MainLg;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGGameEndEvent; import fr.leomelki.loupgarou.events.LGGameEndEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent; import fr.leomelki.loupgarou.events.LGPlayerKilledEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason; import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import org.bukkit.event.EventHandler;
import org.bukkit.scheduler.BukkitRunnable;
public class RBouffon extends Role{ import java.util.ArrayList;
public RBouffon(LGGame game) { import java.util.List;
super(game); import java.util.StringJoiner;
}
@Override
public RoleType getType() {
return RoleType.NEUTRAL;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.NONE;
}
@Override
public String getName() {
return "§d§lBouffon";
}
@Override
public String getFriendlyName() {
return "du "+getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes si tu remplis ton objectif";
}
@Override
public String getDescription() {
return "Tu es §d§lNeutre§f et tu gagnes si tu remplis ton objectif. Ton objectif est d'être éliminé par le village lors de nimporte quel vote de jour. Si tu réussis, tu gagnes la partie, mais celle-ci continue. Tu pourras tuer l'une des personnes qui t'ont condamné.";
}
@Override
public String getTask() {
return "Choisis quelquun à hanter parmi ceux qui ont voté pour ta mort.";
}
@Override
public String getBroadcastedTask() {
return "L'esprit vengeur du "+getName()+"§9 rôde sur le village...";
}
@Override
public int getTimeout() {
return 15;
}
public void onNightTurn(Runnable callback) { public class RBouffon extends Role {
ArrayList<LGPlayer> players = (ArrayList<LGPlayer>) needToPlay.clone(); final ArrayList<LGPlayer> needToPlay = new ArrayList<>();
new Runnable() {
@Override public RBouffon(LGGame game) {
public void run() { super(game);
getGame().cancelWait(); }
if(players.size() == 0) {
onTurnFinish(callback);
return;
}
LGPlayer player = players.remove(0);
getGame().wait(getTimeout(), ()->{RBouffon.this.onNightTurnTimeout(player);this.run();}, (currentPlayer, secondsLeft)-> currentPlayer == player ? "§9§lC'est à ton tour !" : "§6C'est au tour "+getFriendlyName()+" §6(§e"+secondsLeft+" s§6)");
player.sendMessage("§6"+getTask());
// player.sendTitle("§6C'est à vous de jouer", "§a"+getTask(), 100);
onNightTurn(player, this);
}
}.run();
}
public boolean hasPlayersLeft() {
return needToPlay.size() > 0;
}
@Override
public RoleType getType() {
return RoleType.NEUTRAL;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.NONE;
}
@Override @Override
protected void onNightTurn(LGPlayer player, Runnable callback) { public String getName() {
needToPlay.remove(player); return "§d§lBouffon";
player.showView(); }
player.getCache().set("bouffon_win", true);
List<LGPlayer> choosable = getGame().getVote().getVotes(player);
StringJoiner sj = new StringJoiner("§6§o, §6§o§l");
for(LGPlayer lgp : choosable)
if(lgp.getPlayer() != null && lgp != player)
sj.add(lgp.getName());
String toPut = sj.toString(); @Override
if(toPut.length() == 0) public String getFriendlyName() {
player.sendMessage("§6§o§lPersonne§6§o n'a voté pour toi."); return "du " + getName();
else }
player.sendMessage("§6§o§l"+toPut+"§6§o "+(toPut.contains(",") ? "ont" : "a")+" voté pour toi.");
player.choose((choosen)->{ @Override
if(choosen != null) { public String getShortDescription() {
if(!choosable.contains(choosen)) return "Tu gagnes si tu remplis ton objectif";
player.sendMessage("§7§l"+choosen.getName()+"§4 n'a pas voté pour vous."); }
else if(choosen.isDead())
player.sendMessage("§7§l"+choosen.getName()+"§4 est mort.");//fix
else {
player.stopChoosing();
player.sendMessage("§6Ton fantôme va hanter l'esprit de §7§l"+choosen.getName()+"§6.");
getGame().kill(choosen, Reason.BOUFFON);
player.hideView();
callback.run();
}
}
}, player);
}
@Override @Override
protected void onNightTurnTimeout(LGPlayer player) { public String getDescription() {
player.stopChoosing(); return "Tu es §d§lNeutre§f et tu gagnes si tu remplis ton objectif. Ton objectif est d'être éliminé par le village lors de nimporte quel vote de jour. Si tu réussis, tu gagnes la partie, mais celle-ci continue. Tu pourras tuer l'une des personnes qui t'ont condamné.";
} }
final ArrayList<LGPlayer> needToPlay = new ArrayList<>(); @Override
public String getTask() {
return "Choisis quelquun à hanter parmi ceux qui ont voté pour ta mort.";
}
@EventHandler @Override
public void onPlayerKill(LGPlayerKilledEvent e) { public String getBroadcastedTask() {
if(e.getKilled().getRole() == this && e.getReason() == Reason.VOTE && e.getKilled().isRoleActive()) { return "L'esprit vengeur du " + getName() + "§9 rôde sur le village...";
needToPlay.add(e.getKilled()); }
getGame().broadcastMessage("§9§oQuelle erreur, le "+getName()+"§9§o aura droit à sa vengeance...");
e.getKilled().sendMessage("§6Tu as rempli ta mission, l'heure de la vengeance a sonné.");
}
}
@EventHandler @Override
public void onWin(LGGameEndEvent e) { public int getTimeout() {
if(e.getGame() == getGame()) return 15;
for(LGPlayer lgp : getGame().getInGame()) }
if(lgp.getRole() == this && lgp.getCache().getBoolean("bouffon_win")) {
e.getWinners().add(lgp);
new BukkitRunnable() {
@Override public void onNightTurn(Runnable callback) {
public void run() { ArrayList<LGPlayer> players = (ArrayList<LGPlayer>) needToPlay.clone();
getGame().broadcastMessage("§6§oLe "+getName()+"§6§o a rempli son objectif."); new Runnable() {
}
}.runTaskAsynchronously(MainLg.getInstance()); @Override
} public void run() {
} getGame().cancelWait();
if (players.size() == 0) {
onTurnFinish(callback);
return;
}
LGPlayer player = players.remove(0);
getGame().wait(getTimeout(), () -> {
RBouffon.this.onNightTurnTimeout(player);
this.run();
}, (currentPlayer, secondsLeft) -> currentPlayer == player ? "§9§lC'est à ton tour !" : "§6C'est au tour " + getFriendlyName() + " §6(§e" + secondsLeft + " s§6)");
player.sendMessage("§6" + getTask());
// player.sendTitle("§6C'est à vous de jouer", "§a"+getTask(), 100);
onNightTurn(player, this);
}
}.run();
}
public boolean hasPlayersLeft() {
return needToPlay.size() > 0;
}
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
needToPlay.remove(player);
player.showView();
player.getCache().set("bouffon_win", true);
List<LGPlayer> choosable = getGame().getVote().getVotes(player);
StringJoiner sj = new StringJoiner("§6§o, §6§o§l");
for (LGPlayer lgp : choosable)
if (lgp.getPlayer() != null && lgp != player)
sj.add(lgp.getName());
String toPut = sj.toString();
if (toPut.length() == 0)
player.sendMessage("§6§o§lPersonne§6§o n'a voté pour toi.");
else
player.sendMessage("§6§o§l" + toPut + "§6§o " + (toPut.contains(",") ? "ont" : "a") + " voté pour toi.");
player.choose((choosen) -> {
if (choosen != null) {
if (!choosable.contains(choosen))
player.sendMessage("§7§l" + choosen.getName() + "§4 n'a pas voté pour vous.");
else if (choosen.isDead())
player.sendMessage("§7§l" + choosen.getName() + "§4 est mort.");//fix
else {
player.stopChoosing();
player.sendMessage("§6Ton fantôme va hanter l'esprit de §7§l" + choosen.getName() + "§6.");
getGame().kill(choosen, Reason.BOUFFON);
player.hideView();
callback.run();
}
}
}, player);
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.stopChoosing();
}
@EventHandler
public void onPlayerKill(LGPlayerKilledEvent e) {
if (e.getKilled().getRole() == this && e.getReason() == Reason.VOTE && e.getKilled().isRoleActive()) {
needToPlay.add(e.getKilled());
getGame().broadcastMessage("§9§oQuelle erreur, le " + getName() + "§9§o aura droit à sa vengeance...");
e.getKilled().sendMessage("§6Tu as rempli ta mission, l'heure de la vengeance a sonné.");
}
}
@EventHandler
public void onWin(LGGameEndEvent e) {
if (e.getGame() == getGame())
for (LGPlayer lgp : getGame().getInGame())
if (lgp.getRole() == this && lgp.getCache().getBoolean("bouffon_win")) {
e.getWinners().add(lgp);
new BukkitRunnable() {
@Override
public void run() {
getGame().broadcastMessage("§6§oLe " + getName() + "§6§o a rempli son objectif.");
}
}.runTaskAsynchronously(MainLg.getInstance());
}
}
} }

View file

@ -1,95 +1,105 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGNightEndEvent; import fr.leomelki.loupgarou.events.LGNightEndEvent;
import fr.leomelki.loupgarou.events.LGNightPlayerPreKilledEvent; import fr.leomelki.loupgarou.events.LGNightPlayerPreKilledEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason; import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import fr.leomelki.loupgarou.events.LGRoleTurnEndEvent; import fr.leomelki.loupgarou.events.LGRoleTurnEndEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
public class RChaperonRouge extends Role{ public class RChaperonRouge extends Role {
public RChaperonRouge(LGGame game) { public RChaperonRouge(LGGame game) {
super(game); super(game);
} }
@Override
public RoleType getType() {
return RoleType.VILLAGER;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@Override
public String getName() {
return "§a§lChaperon Rouge";
}
@Override
public String getFriendlyName() {
return "du "+getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. Tant que le §a§lChasseur§f est en vie, tu ne peux pas te faire tuer par les §c§lLoups§f pendant la nuit.";
}
@Override
public String getTask() {
return "";
}
@Override
public String getBroadcastedTask() {
return "";
}
@Override
public int getTimeout() {
return -1;
}
@EventHandler(priority = EventPriority.LOWEST) @Override
public void onKill(LGNightPlayerPreKilledEvent e) { public RoleType getType() {
if(e.getKilled().getRole() == this && e.getReason() == Reason.LOUP_GAROU || e.getReason() == Reason.GM_LOUP_GAROU && e.getKilled().isRoleActive()) { return RoleType.VILLAGER;
for(Role role : getGame().getRoles()) }
if(role instanceof RChasseur)
if(role.getPlayers().size() > 0){ @Override
e.getKilled().getCache().set("chaperon_kill", true); public RoleWinType getWinType() {
e.setReason(Reason.DONT_DIE); return RoleWinType.VILLAGE;
break; }
}
} @Override
} public String getName() {
@EventHandler return "§a§lChaperon Rouge";
public void onTour(LGRoleTurnEndEvent e) { }
if(e.getGame() == getGame()) {
if(e.getPreviousRole() instanceof RLoupGarou) { @Override
for(LGPlayer lgp : getGame().getAlive()) public String getFriendlyName() {
if(lgp.getCache().getBoolean("chaperon_kill") && lgp.isRoleActive()) { return "du " + getName();
for(LGPlayer l : getGame().getInGame()) }
if(l.getRoleType() == RoleType.LOUP_GAROU)
l.sendMessage("§cVotre cible est immunisée."); @Override
} public String getShortDescription() {
}else if(e.getPreviousRole() instanceof RGrandMechantLoup) { return "Tu gagnes avec le §a§lVillage";
for(LGPlayer lgp : getGame().getAlive()) }
if(lgp.getCache().getBoolean("chaperon_kill") && lgp.isRoleActive()) {
for(LGPlayer l : e.getPreviousRole().getPlayers()) @Override
l.sendMessage("§cVotre cible est immunisée."); public String getDescription() {
} return "Tu gagnes avec le §a§lVillage§f. Tant que le §a§lChasseur§f est en vie, tu ne peux pas te faire tuer par les §c§lLoups§f pendant la nuit.";
} }
}
} @Override
@EventHandler(priority = EventPriority.HIGHEST) public String getTask() {
public void onDayStart(LGNightEndEvent e) { return "";
if(e.getGame() == getGame()) { }
for(LGPlayer lgp : getPlayers())
if(lgp.getCache().getBoolean("chaperon_kill")) { @Override
lgp.getCache().remove("chaperon_kill"); public String getBroadcastedTask() {
lgp.sendMessage("§9§oTu as été attaqué cette nuit."); return "";
} }
}
} @Override
public int getTimeout() {
return -1;
}
@EventHandler(priority = EventPriority.LOWEST)
public void onKill(LGNightPlayerPreKilledEvent e) {
if (e.getKilled().getRole() == this && e.getReason() == Reason.LOUP_GAROU || e.getReason() == Reason.GM_LOUP_GAROU && e.getKilled().isRoleActive()) {
for (Role role : getGame().getRoles())
if (role instanceof RChasseur)
if (role.getPlayers().size() > 0) {
e.getKilled().getCache().set("chaperon_kill", true);
e.setReason(Reason.DONT_DIE);
break;
}
}
}
@EventHandler
public void onTour(LGRoleTurnEndEvent e) {
if (e.getGame() == getGame()) {
if (e.getPreviousRole() instanceof RLoupGarou) {
for (LGPlayer lgp : getGame().getAlive())
if (lgp.getCache().getBoolean("chaperon_kill") && lgp.isRoleActive()) {
for (LGPlayer l : getGame().getInGame())
if (l.getRoleType() == RoleType.LOUP_GAROU)
l.sendMessage("§cVotre cible est immunisée.");
}
} else if (e.getPreviousRole() instanceof RGrandMechantLoup) {
for (LGPlayer lgp : getGame().getAlive())
if (lgp.getCache().getBoolean("chaperon_kill") && lgp.isRoleActive()) {
for (LGPlayer l : e.getPreviousRole().getPlayers())
l.sendMessage("§cVotre cible est immunisée.");
}
}
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onDayStart(LGNightEndEvent e) {
if (e.getGame() == getGame()) {
for (LGPlayer lgp : getPlayers())
if (lgp.getCache().getBoolean("chaperon_kill")) {
lgp.getCache().remove("chaperon_kill");
lgp.sendMessage("§9§oTu as été attaqué cette nuit.");
}
}
}
} }

View file

@ -1,10 +1,5 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import java.util.ArrayList;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGDayStartEvent; import fr.leomelki.loupgarou.events.LGDayStartEvent;
@ -12,125 +7,139 @@ import fr.leomelki.loupgarou.events.LGGameEndEvent;
import fr.leomelki.loupgarou.events.LGNightStart; import fr.leomelki.loupgarou.events.LGNightStart;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent; import fr.leomelki.loupgarou.events.LGPlayerKilledEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason; import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
public class RChasseur extends Role{ import java.util.ArrayList;
public RChasseur(LGGame game) {
super(game);
}
@Override
public RoleType getType() {
return RoleType.VILLAGER;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@Override
public String getName() {
return "§a§lChasseur";
}
@Override
public String getFriendlyName() {
return "du "+getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. À ta mort, tu dois éliminer un joueur en utilisant ta dernière balle.";
}
@Override
public String getTask() {
return "Tu dois choisir qui va mourir avec toi.";
}
@Override
public String getBroadcastedTask() {
return "Le "+getName()+"§9 choisit qui il va emporter avec lui.";
}
@Override
public int getTimeout() {
return 15;
}
@Override public class RChasseur extends Role {
protected void onNightTurn(LGPlayer player, Runnable callback) { final ArrayList<LGPlayer> needToPlay = new ArrayList<>();
getGame().wait(getTimeout(), ()->{
this.onNightTurnTimeout(player);
callback.run();
}, (currentPlayer, secondsLeft)-> currentPlayer == player ? "§9§lC'est à ton tour !" : "§6Le Chasseur choisit sa cible (§e"+secondsLeft+" s§6)");
getGame().broadcastMessage("§9"+getBroadcastedTask());
player.sendMessage("§6"+getTask());
//player.sendTitle("§6C'est à vous de jouer", "§a"+getTask(), 60);
player.choose((choosen)->{
if(choosen != null) {
player.stopChoosing();
getGame().cancelWait();
LGPlayerKilledEvent killEvent = new LGPlayerKilledEvent(getGame(), choosen, Reason.CHASSEUR);
Bukkit.getPluginManager().callEvent(killEvent);
if(killEvent.isCancelled())
return;
if(getGame().kill(killEvent.getKilled(), killEvent.getReason(), true)) public RChasseur(LGGame game) {
return; super(game);
callback.run(); }
}
}, player);
}
@Override @Override
protected void onNightTurnTimeout(LGPlayer player) { public RoleType getType() {
getGame().broadcastMessage("§9Il n'a pas tiré sur la détente..."); return RoleType.VILLAGER;
player.stopChoosing(); }
}
final ArrayList<LGPlayer> needToPlay = new ArrayList<>(); @Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@EventHandler @Override
public void onPlayerKill(LGPlayerKilledEvent e) { public String getName() {
if(e.getKilled().getRole() == this && e.getReason() != Reason.DISCONNECTED && e.getKilled().isRoleActive()) return "§a§lChasseur";
needToPlay.add(e.getKilled()); }
}
@EventHandler
public void onDayStart(LGDayStartEvent e) {
if(e.getGame() != getGame())return;
if(needToPlay.size() > 0) @Override
e.setCancelled(true); public String getFriendlyName() {
return "du " + getName();
}
if(!e.isCancelled())return; @Override
new Runnable() { public String getShortDescription() {
public void run() { return "Tu gagnes avec le §a§lVillage";
if(needToPlay.size() == 0) { }
e.getGame().startDay();
return;
}
LGPlayer player = needToPlay.remove(0);
onNightTurn(player, this);
}
}.run();
}
@EventHandler @Override
public void onEndGame(LGGameEndEvent e) { public String getDescription() {
if(e.getGame() != getGame())return; return "Tu gagnes avec le §a§lVillage§f. À ta mort, tu dois éliminer un joueur en utilisant ta dernière balle.";
}
if(needToPlay.size() > 0) @Override
e.setCancelled(true); public String getTask() {
return "Tu dois choisir qui va mourir avec toi.";
}
if(!e.isCancelled())return; @Override
new Runnable() { public String getBroadcastedTask() {
public void run() { return "Le " + getName() + "§9 choisit qui il va emporter avec lui.";
if(needToPlay.size() == 0) { }
e.getGame().checkEndGame(true);
return; @Override
} public int getTimeout() {
LGPlayer player = needToPlay.remove(0); return 15;
onNightTurn(player, this); }
}
}.run(); @Override
} protected void onNightTurn(LGPlayer player, Runnable callback) {
getGame().wait(getTimeout(), () -> {
this.onNightTurnTimeout(player);
callback.run();
}, (currentPlayer, secondsLeft) -> currentPlayer == player ? "§9§lC'est à ton tour !" : "§6Le Chasseur choisit sa cible (§e" + secondsLeft + " s§6)");
getGame().broadcastMessage("§9" + getBroadcastedTask());
player.sendMessage("§6" + getTask());
//player.sendTitle("§6C'est à vous de jouer", "§a"+getTask(), 60);
player.choose((choosen) -> {
if (choosen != null) {
player.stopChoosing();
getGame().cancelWait();
LGPlayerKilledEvent killEvent = new LGPlayerKilledEvent(getGame(), choosen, Reason.CHASSEUR);
Bukkit.getPluginManager().callEvent(killEvent);
if (killEvent.isCancelled())
return;
if (getGame().kill(killEvent.getKilled(), killEvent.getReason(), true))
return;
callback.run();
}
}, player);
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
getGame().broadcastMessage("§9Il n'a pas tiré sur la détente...");
player.stopChoosing();
}
@EventHandler
public void onPlayerKill(LGPlayerKilledEvent e) {
if (e.getKilled().getRole() == this && e.getReason() != Reason.DISCONNECTED && e.getKilled().isRoleActive())
needToPlay.add(e.getKilled());
}
@EventHandler
public void onDayStart(LGDayStartEvent e) {
if (e.getGame() != getGame()) return;
if (needToPlay.size() > 0)
e.setCancelled(true);
if (!e.isCancelled()) return;
new Runnable() {
public void run() {
if (needToPlay.size() == 0) {
e.getGame().startDay();
return;
}
LGPlayer player = needToPlay.remove(0);
onNightTurn(player, this);
}
}.run();
}
@EventHandler
public void onEndGame(LGGameEndEvent e) {
if (e.getGame() != getGame()) return;
if (needToPlay.size() > 0)
e.setCancelled(true);
if (!e.isCancelled()) return;
new Runnable() {
public void run() {
if (needToPlay.size() == 0) {
e.getGame().checkEndGame(true);
return;
}
LGPlayer player = needToPlay.remove(0);
onNightTurn(player, this);
}
}.run();
}
/* Deprecated by #onDayStart(LGDayStartEvent) /* Deprecated by #onDayStart(LGDayStartEvent)
* *
@ -153,22 +162,22 @@ public class RChasseur extends Role{
} }
}*/ }*/
@EventHandler @EventHandler
public void onNight(LGNightStart e) { public void onNight(LGNightStart e) {
if(e.getGame() == getGame() && !e.isCancelled()) { if (e.getGame() == getGame() && !e.isCancelled()) {
if(needToPlay.size() > 0) { if (needToPlay.size() > 0) {
e.setCancelled(true); e.setCancelled(true);
new Runnable() { new Runnable() {
public void run() { public void run() {
if(needToPlay.size() == 0) { if (needToPlay.size() == 0) {
e.getGame().nextNight(); e.getGame().nextNight();
return; return;
} }
LGPlayer player = needToPlay.remove(0); LGPlayer player = needToPlay.remove(0);
onNightTurn(player, this); onNightTurn(player, this);
} }
}.run(); }.run();
} }
} }
} }
} }

View file

@ -4,83 +4,93 @@ import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason; import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
public class RChasseurDeVampire extends Role{ public class RChasseurDeVampire extends Role {
public RChasseurDeVampire(LGGame game) { public RChasseurDeVampire(LGGame game) {
super(game); super(game);
} }
@Override
public RoleType getType() {
return RoleType.VILLAGER;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@Override
public String getName() {
return "§a§lChasseur de Vampires";
}
@Override
public String getFriendlyName() {
return "du "+getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. Chaque nuit, tu peux traquer un joueur pour découvrir s'il s'agit d'un Vampire. Si c'est le cas, tu le tueras dans son sommeil. Si les §5§lVampires§f te prennent pour cible, tu seras immunisé contre leur attaque, et tu tueras le plus jeune d'entre eux.";
}
@Override
public String getTask() {
return "Choisis un joueur à pister.";
}
@Override
public String getBroadcastedTask() {
return "Le "+getName()+"§9 traque ses proies...";
}
@Override
public int getTimeout() {
return 15;
}
@Override
public boolean hasPlayersLeft() {
for(LGPlayer lgp : getGame().getAlive())
if(lgp.getRoleType() == RoleType.VAMPIRE)
return super.hasPlayersLeft();
return false;
}
@Override @Override
protected void onNightTurn(LGPlayer player, Runnable callback) { public RoleType getType() {
player.showView(); return RoleType.VILLAGER;
}
player.choose(choosen -> { @Override
if(choosen != null && choosen != player) { public RoleWinType getWinType() {
// player.sendMessage("§6Tu as choisi de rendre visite à §7§l"+choosen.getName()+"§6."); return RoleWinType.VILLAGE;
if(choosen.getCache().getBoolean("vampire") || choosen.getRole() instanceof RVampire) { }
getGame().kill(choosen, Reason.CHASSEUR_DE_VAMPIRE);
player.sendMessage("§7§l"+choosen.getName()+"§6 est un §5§lVampire§6, à l'attaque.");
player.sendActionBarMessage("§e§l"+choosen.getName()+"§6 va mourir");
} else {
player.sendMessage("§7§l"+choosen.getName()+"§6 n'est pas un §5§lVampire§6...");
player.sendActionBarMessage("§e§l"+choosen.getName()+"§6 n'est pas un §5§lVampire");
}
player.stopChoosing(); @Override
player.hideView(); public String getName() {
callback.run(); return "§a§lChasseur de Vampires";
} }
});
} @Override
public String getFriendlyName() {
return "du " + getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. Chaque nuit, tu peux traquer un joueur pour découvrir s'il s'agit d'un Vampire. Si c'est le cas, tu le tueras dans son sommeil. Si les §5§lVampires§f te prennent pour cible, tu seras immunisé contre leur attaque, et tu tueras le plus jeune d'entre eux.";
}
@Override
public String getTask() {
return "Choisis un joueur à pister.";
}
@Override
public String getBroadcastedTask() {
return "Le " + getName() + "§9 traque ses proies...";
}
@Override
public int getTimeout() {
return 15;
}
@Override
public boolean hasPlayersLeft() {
for (LGPlayer lgp : getGame().getAlive())
if (lgp.getRoleType() == RoleType.VAMPIRE)
return super.hasPlayersLeft();
return false;
}
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
player.showView();
player.choose(choosen -> {
if (choosen != null && choosen != player) {
// player.sendMessage("§6Tu as choisi de rendre visite à §7§l"+choosen.getName()+"§6.");
if (choosen.getCache().getBoolean("vampire") || choosen.getRole() instanceof RVampire) {
getGame().kill(choosen, Reason.CHASSEUR_DE_VAMPIRE);
player.sendMessage("§7§l" + choosen.getName() + "§6 est un §5§lVampire§6, à l'attaque.");
player.sendActionBarMessage("§e§l" + choosen.getName() + "§6 va mourir");
} else {
player.sendMessage("§7§l" + choosen.getName() + "§6 n'est pas un §5§lVampire§6...");
player.sendActionBarMessage("§e§l" + choosen.getName() + "§6 n'est pas un §5§lVampire");
}
player.stopChoosing();
player.hideView();
callback.run();
}
});
}
@Override @Override
protected void onNightTurnTimeout(LGPlayer player) { protected void onNightTurnTimeout(LGPlayer player) {
player.stopChoosing(); player.stopChoosing();
player.hideView(); player.hideView();
//player.sendTitle("§cVous n'avez regardé aucun rôle", "§4Vous avez mis trop de temps à vous décider...", 80); //player.sendTitle("§cVous n'avez regardé aucun rôle", "§4Vous avez mis trop de temps à vous décider...", 80);
//player.sendMessage("§cVous n'avez pas utilisé votre pouvoir cette nuit."); //player.sendMessage("§cVous n'avez pas utilisé votre pouvoir cette nuit.");
} }
} }

View file

@ -1,8 +1,8 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import java.util.Arrays; import fr.leomelki.loupgarou.MainLg;
import java.util.Collections; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryCustom; import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryCustom;
@ -15,163 +15,167 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import fr.leomelki.loupgarou.MainLg; import java.util.Arrays;
import fr.leomelki.loupgarou.classes.LGGame; import java.util.Collections;
import fr.leomelki.loupgarou.classes.LGPlayer;
public class RChienLoup extends Role{ public class RChienLoup extends Role {
static final ItemStack[] items = new ItemStack[9]; static final ItemStack[] items = new ItemStack[9];
static {
items[3] = new ItemStack(Material.GOLDEN_APPLE);
ItemMeta meta = items[3].getItemMeta();
meta.setDisplayName("§2Devenir Villageois");
meta.setLore(Arrays.asList("§7§lVous n'aurez aucun pouvoir mais",
"§7§lresterez dans le camp du §a§lVillage§7§l."));
items[3].setItemMeta(meta);
items[5] = new ItemStack(Material.ROTTEN_FLESH);
meta = items[5].getItemMeta();
meta.setDisplayName("§cDevenir Loup-Garou");
meta.setLore(Collections.singletonList("§cVous rejoindrez le camp des §c§lLoups"));
items[5].setItemMeta(meta);
}
public RChienLoup(LGGame game) { static {
super(game); items[3] = new ItemStack(Material.GOLDEN_APPLE);
} ItemMeta meta = items[3].getItemMeta();
meta.setDisplayName("§2Devenir Villageois");
meta.setLore(Arrays.asList("§7§lVous n'aurez aucun pouvoir mais",
"§7§lresterez dans le camp du §a§lVillage§7§l."));
items[3].setItemMeta(meta);
items[5] = new ItemStack(Material.ROTTEN_FLESH);
meta = items[5].getItemMeta();
meta.setDisplayName("§cDevenir Loup-Garou");
meta.setLore(Collections.singletonList("§cVous rejoindrez le camp des §c§lLoups"));
items[5].setItemMeta(meta);
}
@Override Runnable callback;
public String getName() { boolean already;
return "§a§lChien-Loup"; boolean inMenu;
}
@Override public RChienLoup(LGGame game) {
public String getFriendlyName() { super(game);
return "du "+getName(); }
}
@Override @Override
public String getShortDescription() { public String getName() {
return "Tu gagnes avec le §a§lVillage"; return "§a§lChien-Loup";
} }
@Override @Override
public String getDescription() { public String getFriendlyName() {
return "Tu gagnes avec le §a§lVillage§f. Au début de la première nuit, tu peux choisir entre rester fidèle aux §a§lVillageois§f ou alors rejoindre le clan des §c§lLoups-Garous§f."; return "du " + getName();
} }
@Override @Override
public String getTask() { public String getShortDescription() {
return "Souhaites-tu devenir un §c§lLoup-Garou§6 ?"; return "Tu gagnes avec le §a§lVillage";
} }
@Override @Override
public String getBroadcastedTask() { public String getDescription() {
return "Le "+getName()+"§9 pourrait trouver de nouveaux amis..."; return "Tu gagnes avec le §a§lVillage§f. Au début de la première nuit, tu peux choisir entre rester fidèle aux §a§lVillageois§f ou alors rejoindre le clan des §c§lLoups-Garous§f.";
} }
@Override
public RoleType getType() {
return RoleType.VILLAGER;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@Override @Override
public int getTimeout() { public String getTask() {
return 15; return "Souhaites-tu devenir un §c§lLoup-Garou§6 ?";
} }
@Override @Override
public boolean hasPlayersLeft() { public String getBroadcastedTask() {
return super.hasPlayersLeft() && !already; return "Le " + getName() + "§9 pourrait trouver de nouveaux amis...";
} }
Runnable callback; @Override
boolean already; public RoleType getType() {
return RoleType.VILLAGER;
}
public void openInventory(Player player) { @Override
inMenu = true; public RoleWinType getWinType() {
Inventory inventory = Bukkit.createInventory(null, 9, "§7Choisis ton camp."); return RoleWinType.VILLAGE;
inventory.setContents(items.clone()); }
player.closeInventory();
player.openInventory(inventory);
}
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
already = true;
player.showView();
this.callback = callback;
openInventory(player.getPlayer());
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
closeInventory(player.getPlayer());
player.hideView();
//player.sendTitle("§cVous n'infectez personne", "§4Vous avez mis trop de temps à vous décider...", 80);
player.sendActionBarMessage("§6Tu rejoins le §a§lVillage.");
player.sendMessage("§6Tu rejoins le §a§lVillage.");
}
boolean inMenu; @Override
public int getTimeout() {
return 15;
}
private void closeInventory(Player p) { @Override
inMenu = false; public boolean hasPlayersLeft() {
p.closeInventory(); return super.hasPlayersLeft() && !already;
} }
@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
ItemStack item = e.getCurrentItem();
Player player = (Player)e.getWhoClicked();
LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
if(lgp.getRole() != this || item == null || item.getItemMeta() == null)return; public void openInventory(Player player) {
inMenu = true;
Inventory inventory = Bukkit.createInventory(null, 9, "§7Choisis ton camp.");
inventory.setContents(items.clone());
player.closeInventory();
player.openInventory(inventory);
}
if(item.getItemMeta().getDisplayName().equals(items[3].getItemMeta().getDisplayName())) { @Override
e.setCancelled(true); protected void onNightTurn(LGPlayer player, Runnable callback) {
closeInventory(player); already = true;
lgp.sendActionBarMessage("§6Tu resteras fidèle au §a§lVillage§6."); player.showView();
lgp.sendMessage("§6Tu resteras fidèle au §a§lVillage§6."); this.callback = callback;
lgp.hideView(); openInventory(player.getPlayer());
callback.run(); }
}else if(item.getItemMeta().getDisplayName().equals(items[5].getItemMeta().getDisplayName())) {
e.setCancelled(true);
closeInventory(player);
lgp.sendActionBarMessage("§6Tu as changé de camp."); @Override
lgp.sendMessage("§6Tu as changé de camp."); protected void onNightTurnTimeout(LGPlayer player) {
closeInventory(player.getPlayer());
player.hideView();
//player.sendTitle("§cVous n'infectez personne", "§4Vous avez mis trop de temps à vous décider...", 80);
player.sendActionBarMessage("§6Tu rejoins le §a§lVillage.");
player.sendMessage("§6Tu rejoins le §a§lVillage.");
}
//On le fait aussi rejoindre le camp des loups pour le tour pendant la nuit. private void closeInventory(Player p) {
RChienLoupLG lgChienLoup = null; inMenu = false;
for(Role role : getGame().getRoles()) p.closeInventory();
if(role instanceof RChienLoupLG) }
lgChienLoup = (RChienLoupLG)role;
if(lgChienLoup == null) @EventHandler
getGame().getRoles().add(lgChienLoup = new RChienLoupLG(getGame())); public void onInventoryClick(InventoryClickEvent e) {
ItemStack item = e.getCurrentItem();
Player player = (Player) e.getWhoClicked();
LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
lgChienLoup.join(lgp, false); if (lgp.getRole() != this || item == null || item.getItemMeta() == null) return;
lgp.updateOwnSkin();
lgp.hideView(); if (item.getItemMeta().getDisplayName().equals(items[3].getItemMeta().getDisplayName())) {
callback.run(); e.setCancelled(true);
} closeInventory(player);
} lgp.sendActionBarMessage("§6Tu resteras fidèle au §a§lVillage§6.");
lgp.sendMessage("§6Tu resteras fidèle au §a§lVillage§6.");
lgp.hideView();
callback.run();
} else if (item.getItemMeta().getDisplayName().equals(items[5].getItemMeta().getDisplayName())) {
e.setCancelled(true);
closeInventory(player);
@EventHandler lgp.sendActionBarMessage("§6Tu as changé de camp.");
public void onQuitInventory(InventoryCloseEvent e) { lgp.sendMessage("§6Tu as changé de camp.");
if(e.getInventory() instanceof CraftInventoryCustom) {
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), (Player)e.getPlayer());
if(player.getRole() == this && inMenu) {
new BukkitRunnable() {
@Override //On le fait aussi rejoindre le camp des loups pour le tour pendant la nuit.
public void run() { RChienLoupLG lgChienLoup = null;
e.getPlayer().openInventory(e.getInventory()); for (Role role : getGame().getRoles())
} if (role instanceof RChienLoupLG)
}.runTaskLater(MainLg.getInstance(), 1); lgChienLoup = (RChienLoupLG) role;
}
} if (lgChienLoup == null)
} getGame().getRoles().add(lgChienLoup = new RChienLoupLG(getGame()));
lgChienLoup.join(lgp, false);
lgp.updateOwnSkin();
lgp.hideView();
callback.run();
}
}
@EventHandler
public void onQuitInventory(InventoryCloseEvent e) {
if (e.getInventory() instanceof CraftInventoryCustom) {
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), (Player) e.getPlayer());
if (player.getRole() == this && inMenu) {
new BukkitRunnable() {
@Override
public void run() {
e.getPlayer().openInventory(e.getInventory());
}
}.runTaskLater(MainLg.getInstance(), 1);
}
}
}
} }

View file

@ -1,72 +1,74 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import org.bukkit.potion.PotionEffectType;
import fr.leomelki.loupgarou.classes.LGCustomItems; import fr.leomelki.loupgarou.classes.LGCustomItems;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import org.bukkit.potion.PotionEffectType;
public class RChienLoupLG extends Role{ public class RChienLoupLG extends Role {
public RChienLoupLG(LGGame game) { public RChienLoupLG(LGGame game) {
super(game); super(game);
} }
@Override
public String getName() {
for(LGPlayer lgp : getPlayers())
if(lgp.getPlayer() != null && lgp.getPlayer().hasPotionEffect(PotionEffectType.INVISIBILITY))
return "§c§lChien-Loup";
return (getPlayers().size() > 0 ? "§a" : "§c")+"§lChien-Loup";
}
@Override @Override
public String getFriendlyName() { public String getName() {
return "du "+getName(); for (LGPlayer lgp : getPlayers())
} if (lgp.getPlayer() != null && lgp.getPlayer().hasPotionEffect(PotionEffectType.INVISIBILITY))
return "§c§lChien-Loup";
return (getPlayers().size() > 0 ? "§a" : "§c") + "§lChien-Loup";
}
@Override @Override
public String getShortDescription() { public String getFriendlyName() {
return "Tu gagnes avec le §a§lVillage"; return "du " + getName();
} }
@Override @Override
public String getDescription() { public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage§f. Au début de la première nuit, tu peux choisir entre rester fidèle aux §a§lVillageois§f ou alors rejoindre le clan des §c§lLoups-Garous§f."; return "Tu gagnes avec le §a§lVillage";
} }
@Override @Override
public String getTask() { public String getDescription() {
return "Souhaites-tu devenir un §c§lLoup-Garou§6 ?"; return "Tu gagnes avec le §a§lVillage§f. Au début de la première nuit, tu peux choisir entre rester fidèle aux §a§lVillageois§f ou alors rejoindre le clan des §c§lLoups-Garous§f.";
} }
@Override @Override
public String getBroadcastedTask() { public String getTask() {
return "Le "+getName()+"§9 pourrait trouver de nouveaux amis..."; return "Souhaites-tu devenir un §c§lLoup-Garou§6 ?";
} }
@Override
public RoleType getType() {
return RoleType.LOUP_GAROU;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.LOUP_GAROU;
}
@Override @Override
public int getTimeout() { public String getBroadcastedTask() {
return -1; return "Le " + getName() + "§9 pourrait trouver de nouveaux amis...";
} }
@Override @Override
public void join(LGPlayer player, boolean sendMessage) { public RoleType getType() {
super.join(player, sendMessage); return RoleType.LOUP_GAROU;
player.setRole(this); }
LGCustomItems.updateItem(player);
for(Role role : getGame().getRoles()) @Override
if(role instanceof RLoupGarou) { public RoleWinType getWinType() {
role.join(player, false); return RoleWinType.LOUP_GAROU;
for(LGPlayer lgp : role.getPlayers()) }
if(lgp != player)
lgp.sendMessage("§7§l"+player.getName()+"§6 a rejoint les §c§lLoups-Garous§6."); @Override
} public int getTimeout() {
} return -1;
}
@Override
public void join(LGPlayer player, boolean sendMessage) {
super.join(player, sendMessage);
player.setRole(this);
LGCustomItems.updateItem(player);
for (Role role : getGame().getRoles())
if (role instanceof RLoupGarou) {
role.join(player, false);
for (LGPlayer lgp : role.getPlayers())
if (lgp != player)
lgp.sendMessage("§7§l" + player.getName() + "§6 a rejoint les §c§lLoups-Garous§6.");
}
}
} }

View file

@ -1,106 +1,114 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import org.bukkit.event.EventHandler;
import org.bukkit.scheduler.BukkitRunnable;
import fr.leomelki.loupgarou.MainLg; import fr.leomelki.loupgarou.MainLg;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGDayEndEvent; import fr.leomelki.loupgarou.events.LGDayEndEvent;
import fr.leomelki.loupgarou.events.LGVoteEvent; import fr.leomelki.loupgarou.events.LGVoteEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.scheduler.BukkitRunnable;
public class RCorbeau extends Role{ public class RCorbeau extends Role {
public RCorbeau(LGGame game) { public RCorbeau(LGGame game) {
super(game); super(game);
} }
@Override
public RoleType getType() {
return RoleType.VILLAGER;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@Override
public String getName() {
return "§a§lCorbeau";
}
@Override
public String getFriendlyName() {
return "du "+getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. Chaque nuit, tu peux désigner un joueur qui se retrouvera le lendemain avec deux voix contre lui au vote.";
}
@Override
public String getTask() {
return "Tu peux choisir un joueur qui aura deux votes contre lui.";
}
@Override
public String getBroadcastedTask() {
return "Le "+getName()+"§9 s'apprête à diffamer quelqu'un...";
}
@Override
public int getTimeout() {
return 15;
}
@Override @Override
protected void onNightTurn(LGPlayer player, Runnable callback) { public RoleType getType() {
player.showView(); return RoleType.VILLAGER;
}
player.choose(choosen -> { @Override
if(choosen != null && choosen != player) { public RoleWinType getWinType() {
//player.sendTitle("§6Vous avez regardé un rôle", "§e§l"+choosen.getName()+"§6§l est §e§l"+choosen.getRole().getName(), 5*20); return RoleWinType.VILLAGE;
}
choosen.getCache().set("corbeau_selected", true); @Override
public String getName() {
return "§a§lCorbeau";
}
player.sendActionBarMessage("§e§l"+choosen.getName()+"§6 aura deux votes contre lui"); @Override
player.sendMessage("§6Tu nuis à la réputation de §7§l"+choosen.getName()+"§6."); public String getFriendlyName() {
player.stopChoosing(); return "du " + getName();
player.hideView(); }
callback.run();
}
});
}
@EventHandler @Override
public void onNightStart(LGDayEndEvent e) { public String getShortDescription() {
if(e.getGame() == getGame()) return "Tu gagnes avec le §a§lVillage";
for(LGPlayer lgp : getGame().getAlive()) }
lgp.getCache().remove("corbeau_selected");
}
@EventHandler @Override
public void onVoteStart(LGVoteEvent e) { public String getDescription() {
if(e.getGame() == getGame()) return "Tu gagnes avec le §a§lVillage§f. Chaque nuit, tu peux désigner un joueur qui se retrouvera le lendemain avec deux voix contre lui au vote.";
for(LGPlayer lgp : getGame().getAlive()) }
if(lgp.getCache().getBoolean("corbeau_selected")) {
lgp.getCache().remove("corbeau_selected");
new BukkitRunnable() {
@Override @Override
public void run() { public String getTask() {
MainLg plugin = getGame().getPlugin(); return "Tu peux choisir un joueur qui aura deux votes contre lui.";
getGame().getVote().vote(new LGPlayer(plugin, "§a§lLe corbeau"), lgp); }
getGame().getVote().vote(new LGPlayer(plugin, "§a§lLe corbeau"), lgp);//fix
getGame().broadcastMessage("§7§l"+ lgp.getName()+"§6 a reçu la visite du "+getName()+"§6.");
}
}.runTask(MainLg.getInstance());
} @Override
} public String getBroadcastedTask() {
return "Le " + getName() + "§9 s'apprête à diffamer quelqu'un...";
}
@Override @Override
protected void onNightTurnTimeout(LGPlayer player) { public int getTimeout() {
player.stopChoosing(); return 15;
player.hideView(); }
//player.sendTitle("§cVous n'avez regardé aucun rôle", "§4Vous avez mis trop de temps à vous décider...", 80);
//player.sendMessage("§cVous n'avez pas utilisé votre pouvoir cette nuit."); @Override
} protected void onNightTurn(LGPlayer player, Runnable callback) {
player.showView();
player.choose(choosen -> {
if (choosen != null && choosen != player) {
//player.sendTitle("§6Vous avez regardé un rôle", "§e§l"+choosen.getName()+"§6§l est §e§l"+choosen.getRole().getName(), 5*20);
choosen.getCache().set("corbeau_selected", true);
player.sendActionBarMessage("§e§l" + choosen.getName() + "§6 aura deux votes contre lui");
player.sendMessage("§6Tu nuis à la réputation de §7§l" + choosen.getName() + "§6.");
player.stopChoosing();
player.hideView();
callback.run();
}
});
}
@EventHandler
public void onNightStart(LGDayEndEvent e) {
if (e.getGame() == getGame())
for (LGPlayer lgp : getGame().getAlive())
lgp.getCache().remove("corbeau_selected");
}
@EventHandler
public void onVoteStart(LGVoteEvent e) {
if (e.getGame() == getGame())
for (LGPlayer lgp : getGame().getAlive())
if (lgp.getCache().getBoolean("corbeau_selected")) {
lgp.getCache().remove("corbeau_selected");
new BukkitRunnable() {
@Override
public void run() {
MainLg plugin = getGame().getPlugin();
getGame().getVote().vote(new LGPlayer(plugin, "§a§lLe corbeau"), lgp);
getGame().getVote().vote(new LGPlayer(plugin, "§a§lLe corbeau"), lgp);//fix
getGame().broadcastMessage("§7§l" + lgp.getName() + "§6 a reçu la visite du " + getName() + "§6.");
}
}.runTask(MainLg.getInstance());
}
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.stopChoosing();
player.hideView();
//player.sendTitle("§cVous n'avez regardé aucun rôle", "§4Vous avez mis trop de temps à vous décider...", 80);
//player.sendMessage("§cVous n'avez pas utilisé votre pouvoir cette nuit.");
}
} }

View file

@ -1,8 +1,16 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import java.util.ArrayList; import com.comphenix.protocol.wrappers.EnumWrappers.ItemSlot;
import java.util.Arrays; import com.comphenix.protocol.wrappers.WrappedDataWatcher;
import com.comphenix.protocol.wrappers.WrappedDataWatcher.WrappedDataWatcherObject;
import com.comphenix.protocol.wrappers.WrappedWatchableObject;
import fr.leomelki.com.comphenix.packetwrapper.*;
import fr.leomelki.loupgarou.MainLg;
import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.classes.LGWinType;
import fr.leomelki.loupgarou.events.*;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@ -13,260 +21,253 @@ import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import com.comphenix.protocol.wrappers.EnumWrappers.ItemSlot; import java.util.ArrayList;
import com.comphenix.protocol.wrappers.WrappedDataWatcher; import java.util.Arrays;
import com.comphenix.protocol.wrappers.WrappedDataWatcher.WrappedDataWatcherObject;
import com.comphenix.protocol.wrappers.WrappedWatchableObject;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerEntityDestroy; public class RCupidon extends Role {
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerEntityEquipment; final WrappedDataWatcherObject invisible = new WrappedDataWatcherObject(0, WrappedDataWatcher.Registry.get(Byte.class));
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerEntityLook; final WrappedDataWatcherObject noGravity = new WrappedDataWatcherObject(5, WrappedDataWatcher.Registry.get(Boolean.class));
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerEntityMetadata;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerSpawnEntityLiving;
import fr.leomelki.loupgarou.MainLg;
import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.classes.LGWinType;
import fr.leomelki.loupgarou.events.LGEndCheckEvent;
import fr.leomelki.loupgarou.events.LGGameEndEvent;
import fr.leomelki.loupgarou.events.LGPlayerGotKilledEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import fr.leomelki.loupgarou.events.LGUpdatePrefixEvent;
public class RCupidon extends Role{ public RCupidon(LGGame game) {
public RCupidon(LGGame game) { super(game);
super(game); }
}
@Override
public RoleType getType() {
return RoleType.VILLAGER;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@Override
public String getName() {
return "§a§lCupidon";
}
@Override
public String getFriendlyName() {
return "de "+getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. Dès le début de la partie, tu dois former un couple de deux joueurs. Leur objectif sera de survivre ensemble, car si l'un d'eux meurt, l'autre se suicidera.";
}
@Override
public String getTask() {
return "Choisis deux joueurs à mettre en couple.";
}
@Override
public String getBroadcastedTask() {
return getName()+"§9 choisit deux âmes à unir.";
}
@Override @Override
public int getTimeout() { public RoleType getType() {
return 15; return RoleType.VILLAGER;
} }
@Override
public boolean hasPlayersLeft() {
return getGame().getNight() == 1;
}
@Override @Override
protected void onNightTurn(LGPlayer player, Runnable callback) { public RoleWinType getWinType() {
player.showView(); return RoleWinType.VILLAGE;
}
player.choose(choosen -> { @Override
if(choosen != null) { public String getName() {
if(player.getCache().has("cupidon_first")) { return "§a§lCupidon";
LGPlayer first = player.getCache().remove("cupidon_first"); }
if(first == choosen) {
int entityId = Integer.MAX_VALUE-choosen.getPlayer().getEntityId();
WrapperPlayServerEntityDestroy destroy = new WrapperPlayServerEntityDestroy();
destroy.setEntityIds(new int[] {entityId});
destroy.sendPacket(player.getPlayer());
} else {
// sendHead(player, choosen);
int entityId = Integer.MAX_VALUE-first.getPlayer().getEntityId();
WrapperPlayServerEntityDestroy destroy = new WrapperPlayServerEntityDestroy();
destroy.setEntityIds(new int[] {entityId});
destroy.sendPacket(player.getPlayer());
setInLove(first, choosen); @Override
player.sendMessage("§7§l"+first.getName()+"§9 et §7§l"+choosen.getName()+"§9 sont désormais follement amoureux."); public String getFriendlyName() {
player.stopChoosing(); return "de " + getName();
player.hideView(); }
callback.run();
}
} else {
sendHead(player, choosen);
player.getCache().set("cupidon_first", choosen);
}
}
});
}
protected void setInLove(LGPlayer player1, LGPlayer player2) {
player1.getCache().set("inlove", player2);
player1.sendMessage("§9Tu tombes amoureux de §7§l"+player2.getName()+"§9, il est "+player2.getRole().getName());
player1.sendMessage("§9§oTu peux lui parler en mettant un §e!§9 devant ton message.");
player2.getCache().set("inlove", player1); @Override
player2.sendMessage("§9Tu tombes amoureux de §7§l"+player1.getName()+"§9, il est "+player1.getRole().getName()); public String getShortDescription() {
player2.sendMessage("§9§oTu peux lui parler en mettant un §e!§9 devant ton message."); return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. Dès le début de la partie, tu dois former un couple de deux joueurs. Leur objectif sera de survivre ensemble, car si l'un d'eux meurt, l'autre se suicidera.";
}
@Override
public String getTask() {
return "Choisis deux joueurs à mettre en couple.";
}
@Override
public String getBroadcastedTask() {
return getName() + "§9 choisit deux âmes à unir.";
}
@Override
public int getTimeout() {
return 15;
}
@Override
public boolean hasPlayersLeft() {
return getGame().getNight() == 1;
}
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
player.showView();
player.choose(choosen -> {
if (choosen != null) {
if (player.getCache().has("cupidon_first")) {
LGPlayer first = player.getCache().remove("cupidon_first");
if (first == choosen) {
int entityId = Integer.MAX_VALUE - choosen.getPlayer().getEntityId();
WrapperPlayServerEntityDestroy destroy = new WrapperPlayServerEntityDestroy();
destroy.setEntityIds(new int[]{entityId});
destroy.sendPacket(player.getPlayer());
} else {
// sendHead(player, choosen);
int entityId = Integer.MAX_VALUE - first.getPlayer().getEntityId();
WrapperPlayServerEntityDestroy destroy = new WrapperPlayServerEntityDestroy();
destroy.setEntityIds(new int[]{entityId});
destroy.sendPacket(player.getPlayer());
setInLove(first, choosen);
player.sendMessage("§7§l" + first.getName() + "§9 et §7§l" + choosen.getName() + "§9 sont désormais follement amoureux.");
player.stopChoosing();
player.hideView();
callback.run();
}
} else {
sendHead(player, choosen);
player.getCache().set("cupidon_first", choosen);
}
}
});
}
protected void setInLove(LGPlayer player1, LGPlayer player2) {
player1.getCache().set("inlove", player2);
player1.sendMessage("§9Tu tombes amoureux de §7§l" + player2.getName() + "§9, il est " + player2.getRole().getName());
player1.sendMessage("§9§oTu peux lui parler en mettant un §e!§9 devant ton message.");
player2.getCache().set("inlove", player1);
player2.sendMessage("§9Tu tombes amoureux de §7§l" + player1.getName() + "§9, il est " + player1.getRole().getName());
player2.sendMessage("§9§oTu peux lui parler en mettant un §e!§9 devant ton message.");
/* sendHead(player1, player2); /* sendHead(player1, player2);
sendHead(player2, player1);*/ sendHead(player2, player1);*/
//On peut créer des cheats grâce à ça (qui permettent de savoir qui est en couple) //On peut créer des cheats grâce à ça (qui permettent de savoir qui est en couple)
player1.updatePrefix(); player1.updatePrefix();
player2.updatePrefix(); player2.updatePrefix();
} }
final WrappedDataWatcherObject invisible = new WrappedDataWatcherObject(0, WrappedDataWatcher.Registry.get(Byte.class)); protected void sendHead(LGPlayer to, LGPlayer ofWho) {
final WrappedDataWatcherObject noGravity = new WrappedDataWatcherObject(5, WrappedDataWatcher.Registry.get(Boolean.class)); int entityId = Integer.MAX_VALUE - ofWho.getPlayer().getEntityId();
protected void sendHead(LGPlayer to, LGPlayer ofWho) { WrapperPlayServerSpawnEntityLiving spawn = new WrapperPlayServerSpawnEntityLiving();
int entityId = Integer.MAX_VALUE-ofWho.getPlayer().getEntityId(); spawn.setEntityID(entityId);
WrapperPlayServerSpawnEntityLiving spawn = new WrapperPlayServerSpawnEntityLiving(); spawn.setType(EntityType.DROPPED_ITEM);
spawn.setEntityID(entityId); //spawn.setMetadata(new WrappedDataWatcher(Arrays.asList(new WrappedWatchableObject(invisible, (byte)0x20), new WrappedWatchableObject(noGravity, true))));
spawn.setType(EntityType.DROPPED_ITEM); Location loc = ofWho.getPlayer().getLocation();
//spawn.setMetadata(new WrappedDataWatcher(Arrays.asList(new WrappedWatchableObject(invisible, (byte)0x20), new WrappedWatchableObject(noGravity, true)))); spawn.setX(loc.getX());
Location loc = ofWho.getPlayer().getLocation(); spawn.setY(loc.getY() + 1.9);
spawn.setX(loc.getX()); spawn.setZ(loc.getZ());
spawn.setY(loc.getY()+1.9); spawn.setHeadPitch(0);
spawn.setZ(loc.getZ()); Location toLoc = to.getPlayer().getLocation();
spawn.setHeadPitch(0); double diffX = loc.getX() - toLoc.getX(),
Location toLoc = to.getPlayer().getLocation(); diffZ = loc.getZ() - toLoc.getZ();
double diffX = loc.getX()-toLoc.getX(), float yaw = 180 - ((float) Math.toDegrees(Math.atan2(diffX, diffZ)));
diffZ = loc.getZ()-toLoc.getZ();
float yaw = 180-((float) Math.toDegrees(Math.atan2(diffX, diffZ)));
spawn.setYaw(yaw); spawn.setYaw(yaw);
spawn.sendPacket(to.getPlayer()); spawn.sendPacket(to.getPlayer());
WrapperPlayServerEntityLook look = new WrapperPlayServerEntityLook(); WrapperPlayServerEntityLook look = new WrapperPlayServerEntityLook();
look.setEntityID(entityId); look.setEntityID(entityId);
look.setPitch(0); look.setPitch(0);
look.setYaw(yaw); look.setYaw(yaw);
look.sendPacket(to.getPlayer()); look.sendPacket(to.getPlayer());
WrapperPlayServerEntityMetadata meta = new WrapperPlayServerEntityMetadata(); WrapperPlayServerEntityMetadata meta = new WrapperPlayServerEntityMetadata();
meta.setEntityID(entityId); meta.setEntityID(entityId);
meta.setMetadata(Arrays.asList(new WrappedWatchableObject(invisible, (byte)0x20), new WrappedWatchableObject(noGravity, true))); meta.setMetadata(Arrays.asList(new WrappedWatchableObject(invisible, (byte) 0x20), new WrappedWatchableObject(noGravity, true)));
meta.sendPacket(to.getPlayer()); meta.sendPacket(to.getPlayer());
new BukkitRunnable() {
new BukkitRunnable() { @Override
public void run() {
WrapperPlayServerEntityEquipment equip = new WrapperPlayServerEntityEquipment();
equip.setEntityID(entityId);
equip.setSlot(ItemSlot.HEAD);
ItemStack skull = new ItemStack(Material.SUGAR);
equip.setItem(skull);
equip.sendPacket(to.getPlayer());
}
}.runTaskLater(MainLg.getInstance(), 2);
}
@Override @Override
public void run() { protected void onNightTurnTimeout(LGPlayer player) {
WrapperPlayServerEntityEquipment equip = new WrapperPlayServerEntityEquipment(); player.getCache().remove("cupidon_first");
equip.setEntityID(entityId); player.stopChoosing();
equip.setSlot(ItemSlot.HEAD); player.hideView();
ItemStack skull = new ItemStack(Material.SUGAR); //player.sendTitle("§cVous n'avez mis personne en couple", "§4Vous avez mis trop de temps à vous décider...", 80);
equip.setItem(skull); //player.sendMessage("§9Tu n'as pas créé de couple.");
equip.sendPacket(to.getPlayer()); }
}
}.runTaskLater(MainLg.getInstance(), 2);
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.getCache().remove("cupidon_first");
player.stopChoosing();
player.hideView();
//player.sendTitle("§cVous n'avez mis personne en couple", "§4Vous avez mis trop de temps à vous décider...", 80);
//player.sendMessage("§9Tu n'as pas créé de couple.");
}
@EventHandler @EventHandler
public void onPlayerKill(LGPlayerGotKilledEvent e) { public void onPlayerKill(LGPlayerGotKilledEvent e) {
if(e.getGame() == getGame() && e.getKilled().getCache().has("inlove") && !e.getKilled().getCache().<LGPlayer>get("inlove").isDead()) { if (e.getGame() == getGame() && e.getKilled().getCache().has("inlove") && !e.getKilled().getCache().<LGPlayer>get("inlove").isDead()) {
LGPlayer killed = e.getKilled().getCache().get("inlove"); LGPlayer killed = e.getKilled().getCache().get("inlove");
LGPlayerKilledEvent event = new LGPlayerKilledEvent(getGame(), killed, Reason.LOVE); LGPlayerKilledEvent event = new LGPlayerKilledEvent(getGame(), killed, Reason.LOVE);
Bukkit.getPluginManager().callEvent(event); Bukkit.getPluginManager().callEvent(event);
if(!event.isCancelled()) if (!event.isCancelled())
getGame().kill(event.getKilled(), event.getReason(), false); getGame().kill(event.getKilled(), event.getReason(), false);
} }
} }
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
public void onGameEnd(LGGameEndEvent e) { public void onGameEnd(LGGameEndEvent e) {
if(e.getGame() == getGame()) { if (e.getGame() == getGame()) {
WrapperPlayServerEntityDestroy destroy = new WrapperPlayServerEntityDestroy(); WrapperPlayServerEntityDestroy destroy = new WrapperPlayServerEntityDestroy();
ArrayList<Integer> ids = new ArrayList<>(); ArrayList<Integer> ids = new ArrayList<>();
for(LGPlayer lgp : getGame().getInGame()) for (LGPlayer lgp : getGame().getInGame())
ids.add(Integer.MAX_VALUE-lgp.getPlayer().getEntityId()); ids.add(Integer.MAX_VALUE - lgp.getPlayer().getEntityId());
int[] intList = new int[ids.size()]; int[] intList = new int[ids.size()];
for(int i = 0;i<ids.size();i++) for (int i = 0; i < ids.size(); i++)
intList[i] = ids.get(i); intList[i] = ids.get(i);
destroy.setEntityIds(intList); destroy.setEntityIds(intList);
for(LGPlayer lgp : getGame().getInGame()) for (LGPlayer lgp : getGame().getInGame())
destroy.sendPacket(lgp.getPlayer()); destroy.sendPacket(lgp.getPlayer());
for(LGPlayer lgp : getGame().getInGame()) for (LGPlayer lgp : getGame().getInGame())
if(lgp.getCache().has("inlove")) { if (lgp.getCache().has("inlove")) {
if(e.getWinType() == LGWinType.COUPLE) { if (e.getWinType() == LGWinType.COUPLE) {
if(!e.getWinners().contains(lgp)) if (!e.getWinners().contains(lgp))
e.getWinners().add(lgp); e.getWinners().add(lgp);
} else { } else {
LGPlayer player2 = lgp.getCache().get("inlove"); LGPlayer player2 = lgp.getCache().get("inlove");
boolean winEnCouple = (lgp.getRoleType() == RoleType.LOUP_GAROU) != (player2.getRoleType() == RoleType.LOUP_GAROU) || lgp.getRoleWinType() == RoleWinType.SEUL || player2.getRoleWinType() == RoleWinType.SEUL; boolean winEnCouple = (lgp.getRoleType() == RoleType.LOUP_GAROU) != (player2.getRoleType() == RoleType.LOUP_GAROU) || lgp.getRoleWinType() == RoleWinType.SEUL || player2.getRoleWinType() == RoleWinType.SEUL;
if(winEnCouple) { if (winEnCouple) {
System.out.println(lgp.getName()+" ne peut pas gagner car il était en couple !"); System.out.println(lgp.getName() + " ne peut pas gagner car il était en couple !");
e.getWinners().remove(lgp); e.getWinners().remove(lgp);
} }
} }
} }
} }
} }
@EventHandler @EventHandler
public void onEndCheck(LGEndCheckEvent e) { public void onEndCheck(LGEndCheckEvent e) {
if(e.getGame() == getGame()) { if (e.getGame() == getGame()) {
ArrayList<LGPlayer> winners = new ArrayList<>(); ArrayList<LGPlayer> winners = new ArrayList<>();
for(LGPlayer lgp : getGame().getAlive()) for (LGPlayer lgp : getGame().getAlive())
if(lgp.getRoleWinType() != RoleWinType.NONE) if (lgp.getRoleWinType() != RoleWinType.NONE)
winners.add(lgp); winners.add(lgp);
if(winners.size() == 2) { if (winners.size() == 2) {
LGPlayer player1 = winners.get(0), LGPlayer player1 = winners.get(0),
player2 = winners.get(1); player2 = winners.get(1);
boolean winEnCouple = (player1.getRoleType() == RoleType.LOUP_GAROU) != (player2.getRoleType() == RoleType.LOUP_GAROU) || player1.getRoleWinType() == RoleWinType.SEUL || player2.getRoleWinType() == RoleWinType.SEUL; boolean winEnCouple = (player1.getRoleType() == RoleType.LOUP_GAROU) != (player2.getRoleType() == RoleType.LOUP_GAROU) || player1.getRoleWinType() == RoleWinType.SEUL || player2.getRoleWinType() == RoleWinType.SEUL;
if(player1.getCache().get("inlove") == player2 && /*player1.isABadGuy() != player2.isABadGuy()*/ (player1.getRoleType() == RoleType.LOUP_GAROU) != (player2.getRoleType() == RoleType.LOUP_GAROU)) if (player1.getCache().get("inlove") == player2 && /*player1.isABadGuy() != player2.isABadGuy()*/ (player1.getRoleType() == RoleType.LOUP_GAROU) != (player2.getRoleType() == RoleType.LOUP_GAROU))
e.setWinType(LGWinType.COUPLE); e.setWinType(LGWinType.COUPLE);
} }
} }
} }
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onChat(AsyncPlayerChatEvent e) { public void onChat(AsyncPlayerChatEvent e) {
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), e.getPlayer()); LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), e.getPlayer());
if(player.getGame() == getGame()) { if (player.getGame() == getGame()) {
if(e.getMessage().startsWith("!")) { if (e.getMessage().startsWith("!")) {
if(player.getCache().has("inlove")){ if (player.getCache().has("inlove")) {
player.sendMessage("§d\u2764 "+player.getName()+" §6» §f"+e.getMessage().substring(1)); player.sendMessage("§d\u2764 " + player.getName() + " §6» §f" + e.getMessage().substring(1));
player.getCache().<LGPlayer>get("inlove").sendMessage("§d\u2764 "+player.getName()+" §6» §f"+e.getMessage().substring(1)); player.getCache().<LGPlayer>get("inlove").sendMessage("§d\u2764 " + player.getName() + " §6» §f" + e.getMessage().substring(1));
}else } else
player.sendMessage("§4Erreur : §cVous n'êtes pas en couple !"); player.sendMessage("§4Erreur : §cVous n'êtes pas en couple !");
e.setCancelled(true); e.setCancelled(true);
} }
} }
} }
@EventHandler(priority = EventPriority.HIGH)
public void onUpdatePrefix (LGUpdatePrefixEvent e) { @EventHandler(priority = EventPriority.HIGH)
if(e.getGame() == getGame()) public void onUpdatePrefix(LGUpdatePrefixEvent e) {
if(e.getTo().getCache().get("inlove") == e.getPlayer() || ((e.getTo() == e.getPlayer() || e.getTo().getRole() == this) && e.getPlayer().getCache().has("inlove"))) if (e.getGame() == getGame())
e.setPrefix("§d\u2764 §f"+e.getPrefix()); if (e.getTo().getCache().get("inlove") == e.getPlayer() || ((e.getTo() == e.getPlayer() || e.getTo().getRole() == this) && e.getPlayer().getCache().has("inlove")))
} e.setPrefix("§d\u2764 §f" + e.getPrefix());
}
/* @EventHandler /* @EventHandler
public void onNight(LGDayEndEvent e) { public void onNight(LGDayEndEvent e) {

View file

@ -3,87 +3,96 @@ package fr.leomelki.loupgarou.roles;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
public class RDetective extends Role{ public class RDetective extends Role {
public RDetective(LGGame game) { public RDetective(LGGame game) {
super(game); super(game);
} }
@Override
public RoleType getType() {
return RoleType.VILLAGER;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@Override
public String getName() {
return "§a§lDétective";
}
@Override
public String getFriendlyName() {
return "du "+getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. Chaque nuit, tu mènes l'enquête sur deux joueurs pour découvrir s'ils font partie du même camp.";
}
@Override
public String getTask() {
return "Choisis deux joueurs à étudier.";
}
@Override
public String getBroadcastedTask() {
return "Le "+getName()+"§9 est sur une enquête...";
}
@Override @Override
public int getTimeout() { public RoleType getType() {
return 15; return RoleType.VILLAGER;
} }
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
player.showView();
player.choose(choosen -> { @Override
if(choosen != null) { public RoleWinType getWinType() {
if(choosen == player) { return RoleWinType.VILLAGE;
player.sendMessage("§cVous ne pouvez pas vous sélectionner !"); }
return;
}
if(player.getCache().has("detective_first")) {
LGPlayer first = player.getCache().remove("detective_first");
if(first == choosen) {
player.sendMessage("§cVous ne pouvez pas comparer §7§l"+first.getName()+"§c avec lui même !");
} else {
if((first.getRoleType() == RoleType.NEUTRAL || choosen.getRoleType() == RoleType.NEUTRAL) ? first.getRole().getClass() == choosen.getRole().getClass() : first.getRoleType() == choosen.getRoleType())
player.sendMessage("§7§l"+first.getName()+"§6 et §7§l"+choosen.getName()+"§6 sont §adu même camp.");
else
player.sendMessage("§7§l"+first.getName()+"§6 et §7§l"+choosen.getName()+"§6 ne sont §cpas du même camp.");
player.stopChoosing(); @Override
player.hideView(); public String getName() {
callback.run(); return "§a§lDétective";
} }
} else {
player.getCache().set("detective_first", choosen);
player.sendMessage("§9Choisis un joueur avec qui tu souhaites comparer le rôle de §7§l"+choosen.getName());
}
}
});
}
@Override @Override
protected void onNightTurnTimeout(LGPlayer player) { public String getFriendlyName() {
player.getCache().remove("detective_first"); return "du " + getName();
player.stopChoosing(); }
player.hideView();
//player.sendTitle("§cVous n'avez mis personne en couple", "§4Vous avez mis trop de temps à vous décider...", 80); @Override
//player.sendMessage("§9Tu n'as pas créé de couple."); public String getShortDescription() {
} return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. Chaque nuit, tu mènes l'enquête sur deux joueurs pour découvrir s'ils font partie du même camp.";
}
@Override
public String getTask() {
return "Choisis deux joueurs à étudier.";
}
@Override
public String getBroadcastedTask() {
return "Le " + getName() + "§9 est sur une enquête...";
}
@Override
public int getTimeout() {
return 15;
}
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
player.showView();
player.choose(choosen -> {
if (choosen != null) {
if (choosen == player) {
player.sendMessage("§cVous ne pouvez pas vous sélectionner !");
return;
}
if (player.getCache().has("detective_first")) {
LGPlayer first = player.getCache().remove("detective_first");
if (first == choosen) {
player.sendMessage("§cVous ne pouvez pas comparer §7§l" + first.getName() + "§c avec lui même !");
} else {
if ((first.getRoleType() == RoleType.NEUTRAL || choosen.getRoleType() == RoleType.NEUTRAL) ? first.getRole().getClass() == choosen.getRole().getClass() : first.getRoleType() == choosen.getRoleType())
player.sendMessage("§7§l" + first.getName() + "§6 et §7§l" + choosen.getName() + "§6 sont §adu même camp.");
else
player.sendMessage("§7§l" + first.getName() + "§6 et §7§l" + choosen.getName() + "§6 ne sont §cpas du même camp.");
player.stopChoosing();
player.hideView();
callback.run();
}
} else {
player.getCache().set("detective_first", choosen);
player.sendMessage("§9Choisis un joueur avec qui tu souhaites comparer le rôle de §7§l" + choosen.getName());
}
}
});
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.getCache().remove("detective_first");
player.stopChoosing();
player.hideView();
//player.sendTitle("§cVous n'avez mis personne en couple", "§4Vous avez mis trop de temps à vous décider...", 80);
//player.sendMessage("§9Tu n'as pas créé de couple.");
}
} }

View file

@ -1,10 +1,14 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import java.util.ArrayList; import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerHeldItemSlot;
import java.util.Arrays; import fr.leomelki.loupgarou.MainLg;
import java.util.Collections; import fr.leomelki.loupgarou.classes.LGGame;
import java.util.Iterator; import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGDayEndEvent;
import fr.leomelki.loupgarou.events.LGMayorVoteEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import fr.leomelki.loupgarou.events.LGVoteEvent;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryCustom; import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryCustom;
@ -19,254 +23,264 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerHeldItemSlot; import java.util.ArrayList;
import fr.leomelki.loupgarou.MainLg; import java.util.Arrays;
import fr.leomelki.loupgarou.classes.LGGame; import java.util.Collections;
import fr.leomelki.loupgarou.classes.LGPlayer; import java.util.Iterator;
import fr.leomelki.loupgarou.events.LGDayEndEvent;
import fr.leomelki.loupgarou.events.LGMayorVoteEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import fr.leomelki.loupgarou.events.LGVoteEvent;
public class RDictateur extends Role{ public class RDictateur extends Role {
static private final ItemStack[] items = new ItemStack[9]; static private final ItemStack[] items = new ItemStack[9];
static private final Inventory inventory; static private final Inventory inventory;
static {
items[3] = new ItemStack(Material.IRON_NUGGET);
ItemMeta meta = items[3].getItemMeta();
meta.setDisplayName("§7§lNe rien faire");
meta.setLore(Collections.singletonList("§8Passez votre tour"));
items[3].setItemMeta(meta);
items[5] = new ItemStack(Material./*DIAMOND_SWORD*/GUNPOWDER);
meta = items[5].getItemMeta();
meta.setDisplayName("§e§lCoup d'État");
meta.setLore(Arrays.asList(
"§8Prends le contrôle du village",
"§8et choisis seul qui mourra demain.",
"",
"§8Si tu tues un §a§lVillageois§8, tu",
"§8l'auras sur la conscience."));
items[5].setItemMeta(meta);
inventory = Bukkit.createInventory(null, 9, "§7Veux-tu faire un coup d'état ?");
inventory.setContents(items.clone());
}
public RDictateur(LGGame game) {
super(game);
}
@Override
public RoleType getType() {
return RoleType.VILLAGER;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@Override
public String getName() {
return "§a§lDictateur";
}
@Override
public String getFriendlyName() {
return "du "+getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. Une fois dans la partie, tu peux choisir d'effectuer un §e§o§lcoup d'état§f, tu choisiras alors seul qui mourra au jour suivant. Si tu fais le bon choix, tu deviendras §5§lCapitaine§f mais si tu tues un §a§lVillageois§f, tu te suicideras la nuit qui suit.";
}
@Override
public String getTask() {
return "Veux-tu réaliser un coup d'état ?";
}
@Override
public String getBroadcastedTask() {
return "Le "+getName()+"§9 décide s'il veut se dévoiler.";
}
@Override static {
public int getTimeout() { items[3] = new ItemStack(Material.IRON_NUGGET);
return 15; ItemMeta meta = items[3].getItemMeta();
} meta.setDisplayName("§7§lNe rien faire");
meta.setLore(Collections.singletonList("§8Passez votre tour"));
items[3].setItemMeta(meta);
items[5] = new ItemStack(Material./*DIAMOND_SWORD*/GUNPOWDER);
meta = items[5].getItemMeta();
meta.setDisplayName("§e§lCoup d'État");
meta.setLore(Arrays.asList(
"§8Prends le contrôle du village",
"§8et choisis seul qui mourra demain.",
"",
"§8Si tu tues un §a§lVillageois§8, tu",
"§8l'auras sur la conscience."));
items[5].setItemMeta(meta);
inventory = Bukkit.createInventory(null, 9, "§7Veux-tu faire un coup d'état ?");
inventory.setContents(items.clone());
}
public void openInventory(Player player) { Runnable callback, run;
inMenu = true; boolean inMenu = false;
player.closeInventory();
player.openInventory(inventory); public RDictateur(LGGame game) {
} super(game);
Runnable callback, run; }
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) { @Override
player.showView(); public RoleType getType() {
this.callback = callback; return RoleType.VILLAGER;
openInventory(player.getPlayer()); }
}
@Override @Override
protected void onNightTurnTimeout(LGPlayer player) { public RoleWinType getWinType() {
player.hideView(); return RoleWinType.VILLAGE;
closeInventory(player.getPlayer()); }
@Override
public String getName() {
return "§a§lDictateur";
}
@Override
public String getFriendlyName() {
return "du " + getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. Une fois dans la partie, tu peux choisir d'effectuer un §e§o§lcoup d'état§f, tu choisiras alors seul qui mourra au jour suivant. Si tu fais le bon choix, tu deviendras §5§lCapitaine§f mais si tu tues un §a§lVillageois§f, tu te suicideras la nuit qui suit.";
}
@Override
public String getTask() {
return "Veux-tu réaliser un coup d'état ?";
}
@Override
public String getBroadcastedTask() {
return "Le " + getName() + "§9 décide s'il veut se dévoiler.";
}
@Override
public int getTimeout() {
return 15;
}
public void openInventory(Player player) {
inMenu = true;
player.closeInventory();
player.openInventory(inventory);
}
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
player.showView();
this.callback = callback;
openInventory(player.getPlayer());
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.hideView();
closeInventory(player.getPlayer());
/*player.sendTitle("§cVous ne faites pas votre coup d'état.", "§4Vous avez mis trop de temps à vous décider...", 80); /*player.sendTitle("§cVous ne faites pas votre coup d'état.", "§4Vous avez mis trop de temps à vous décider...", 80);
player.sendMessage("§cVous ne faites pas votre coup d'état."); player.sendMessage("§cVous ne faites pas votre coup d'état.");
player.sendMessage("§7§oVous aurez de nouveau le choix lors de la prochaine nuit.");*/ player.sendMessage("§7§oVous aurez de nouveau le choix lors de la prochaine nuit.");*/
} }
boolean inMenu = false; private void closeInventory(Player p) {
inMenu = false;
p.closeInventory();
}
private void closeInventory(Player p) { @EventHandler
inMenu = false; public void onInventoryClick(InventoryClickEvent e) {
p.closeInventory(); ItemStack item = e.getCurrentItem();
} Player player = (Player) e.getWhoClicked();
@EventHandler LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
public void onInventoryClick(InventoryClickEvent e) {
ItemStack item = e.getCurrentItem();
Player player = (Player)e.getWhoClicked();
LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
if(lgp.getRole() != this || item == null || item.getItemMeta() == null)return; if (lgp.getRole() != this || item == null || item.getItemMeta() == null) return;
if(item.getItemMeta().getDisplayName().equals(items[3].getItemMeta().getDisplayName())) { if (item.getItemMeta().getDisplayName().equals(items[3].getItemMeta().getDisplayName())) {
e.setCancelled(true); e.setCancelled(true);
closeInventory(player); closeInventory(player);
/*lgp.sendMessage("§cVous ne faites pas votre coup d'état."); /*lgp.sendMessage("§cVous ne faites pas votre coup d'état.");
lgp.sendMessage("§7§oVous aurez de nouveau le choix lors de la prochaine nuit.");*/ lgp.sendMessage("§7§oVous aurez de nouveau le choix lors de la prochaine nuit.");*/
lgp.hideView(); lgp.hideView();
callback.run(); callback.run();
}else if(item.getItemMeta().getDisplayName().equals(items[5].getItemMeta().getDisplayName())) { } else if (item.getItemMeta().getDisplayName().equals(items[5].getItemMeta().getDisplayName())) {
e.setCancelled(true); e.setCancelled(true);
closeInventory(player); closeInventory(player);
lgp.sendActionBarMessage("§9§lTu effectueras un coup d'état"); lgp.sendActionBarMessage("§9§lTu effectueras un coup d'état");
lgp.sendMessage("§6Tu as décidé de faire un coup d'état."); lgp.sendMessage("§6Tu as décidé de faire un coup d'état.");
lgp.getCache().set("coup_d_etat", true); lgp.getCache().set("coup_d_etat", true);
lgp.getCache().set("just_coup_d_etat", true); lgp.getCache().set("just_coup_d_etat", true);
lgp.hideView(); lgp.hideView();
callback.run(); callback.run();
} }
} }
@EventHandler @EventHandler
public void onClick(PlayerInteractEvent e) { public void onClick(PlayerInteractEvent e) {
Player p = e.getPlayer(); Player p = e.getPlayer();
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), p); LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), p);
if(e.getItem() != null && e.getItem().getType() == Material.IRON_NUGGET && player.getRole() == this) { if (e.getItem() != null && e.getItem().getType() == Material.IRON_NUGGET && player.getRole() == this) {
getGame().cancelWait(); getGame().cancelWait();
player.stopChoosing(); player.stopChoosing();
p.getInventory().setItem(8, null); p.getInventory().setItem(8, null);
p.updateInventory(); p.updateInventory();
getGame().broadcastMessage("§7§l"+player.getName()+"§9 n'a tué personne."); getGame().broadcastMessage("§7§l" + player.getName() + "§9 n'a tué personne.");
run.run(); run.run();
} }
} }
@EventHandler @EventHandler
public void onQuitInventory(InventoryCloseEvent e) { public void onQuitInventory(InventoryCloseEvent e) {
if(e.getInventory() instanceof CraftInventoryCustom) { if (e.getInventory() instanceof CraftInventoryCustom) {
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), (Player)e.getPlayer()); LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), (Player) e.getPlayer());
if(player.getRole() == this && inMenu) { if (player.getRole() == this && inMenu) {
new BukkitRunnable() { new BukkitRunnable() {
@Override @Override
public void run() { public void run() {
e.getPlayer().openInventory(e.getInventory()); e.getPlayer().openInventory(e.getInventory());
} }
}.runTaskLater(MainLg.getInstance(), 1); }.runTaskLater(MainLg.getInstance(), 1);
} }
} }
} }
@EventHandler @EventHandler
public void onMayorVote(LGMayorVoteEvent e) { public void onMayorVote(LGMayorVoteEvent e) {
if(e.getGame() == getGame()) if (e.getGame() == getGame())
onTurn(e); onTurn(e);
} }
@EventHandler @EventHandler
public void onVote(LGVoteEvent e) { public void onVote(LGVoteEvent e) {
if(e.getGame() == getGame()) if (e.getGame() == getGame())
onTurn(e); onTurn(e);
} }
public void onTurn(Cancellable e) {
for(LGPlayer lgp : getPlayers())
if(lgp.getCache().getBoolean("just_coup_d_etat") && lgp.isRoleActive())
e.setCancelled(true);
if(!e.isCancelled()) public void onTurn(Cancellable e) {
return; for (LGPlayer lgp : getPlayers())
if (lgp.getCache().getBoolean("just_coup_d_etat") && lgp.isRoleActive())
e.setCancelled(true);
Iterator<LGPlayer> ite = ((ArrayList<LGPlayer>)getPlayers().clone()).iterator(); if (!e.isCancelled())
new Runnable() { return;
public void run() {
run = this;
if(ite.hasNext()) {
LGPlayer lgp = ite.next();
if(lgp.getCache().getBoolean("just_coup_d_etat")) {
getPlayers().remove(lgp);
lgp.getCache().remove("just_coup_d_etat");
getGame().broadcastMessage("§7§l"+lgp.getName()+" §9réalise un coup d'état.");
//lgp.sendTitle("§6Vous faites votre coup d'état", "§aChoisissez qui tuer", 60);
//On le met sur le slot 0 pour éviter un missclick sur la croix Iterator<LGPlayer> ite = ((ArrayList<LGPlayer>) getPlayers().clone()).iterator();
WrapperPlayServerHeldItemSlot hold = new WrapperPlayServerHeldItemSlot(); new Runnable() {
hold.setSlot(0); public void run() {
hold.sendPacket(lgp.getPlayer()); run = this;
if (ite.hasNext()) {
LGPlayer lgp = ite.next();
if (lgp.getCache().getBoolean("just_coup_d_etat")) {
getPlayers().remove(lgp);
lgp.getCache().remove("just_coup_d_etat");
getGame().broadcastMessage("§7§l" + lgp.getName() + " §9réalise un coup d'état.");
//lgp.sendTitle("§6Vous faites votre coup d'état", "§aChoisissez qui tuer", 60);
lgp.sendMessage("§6Choisis un joueur à exécuter."); //On le met sur le slot 0 pour éviter un missclick sur la croix
getGame().wait(60, ()->{ WrapperPlayServerHeldItemSlot hold = new WrapperPlayServerHeldItemSlot();
lgp.stopChoosing(); hold.setSlot(0);
getGame().broadcastMessage("§7§l"+lgp.getName()+"§9 n'a tué personne."); hold.sendPacket(lgp.getPlayer());
lgp.getPlayer().getInventory().setItem(8, null);
lgp.getPlayer().updateInventory();
this.run();
}, (player, secondsLeft)-> lgp == player ? "§9§lC'est à ton tour !" : "§6Le Dictateur choisit sa victime (§e"+secondsLeft+" s§6)");
lgp.choose((choosen)->{
if(choosen != null) {
getGame().cancelWait();
lgp.stopChoosing();
lgp.getPlayer().getInventory().setItem(8, null);
lgp.getPlayer().updateInventory();
kill(choosen, lgp, this);
}
});
lgp.getPlayer().getInventory().setItem(8, items[3]);
lgp.getPlayer().updateInventory();
}
}else
getGame().nextNight();
}
}.run();
}
protected void kill(LGPlayer choosen, LGPlayer dicta, Runnable callback) {
RoleType roleType = choosen.getRoleType();
LGPlayerKilledEvent killEvent = new LGPlayerKilledEvent(getGame(), choosen, Reason.DICTATOR); lgp.sendMessage("§6Choisis un joueur à exécuter.");
Bukkit.getPluginManager().callEvent(killEvent); getGame().wait(60, () -> {
if(killEvent.isCancelled())return; lgp.stopChoosing();
if(getGame().kill(killEvent.getKilled(), killEvent.getReason(), true)) getGame().broadcastMessage("§7§l" + lgp.getName() + "§9 n'a tué personne.");
return; lgp.getPlayer().getInventory().setItem(8, null);
lgp.getPlayer().updateInventory();
this.run();
}, (player, secondsLeft) -> lgp == player ? "§9§lC'est à ton tour !" : "§6Le Dictateur choisit sa victime (§e" + secondsLeft + " s§6)");
lgp.choose((choosen) -> {
if (choosen != null) {
getGame().cancelWait();
lgp.stopChoosing();
lgp.getPlayer().getInventory().setItem(8, null);
lgp.getPlayer().updateInventory();
kill(choosen, lgp, this);
}
});
lgp.getPlayer().getInventory().setItem(8, items[3]);
lgp.getPlayer().updateInventory();
}
} else
getGame().nextNight();
}
}.run();
}
if(roleType != RoleType.VILLAGER) { protected void kill(LGPlayer choosen, LGPlayer dicta, Runnable callback) {
getGame().broadcastMessage("§7§l"+dicta.getName()+" §9devient le §5§lCapitaine§9 du village."); RoleType roleType = choosen.getRoleType();
getGame().setMayor(dicta);
} else {
getGame().kill(dicta, Reason.DICTATOR_SUICIDE);
for(LGPlayer lgp : getGame().getInGame()) {
if(lgp == dicta)
lgp.sendMessage("§9§oÇa ne s'est pas passé comme prévu...");
else
lgp.sendMessage("§9Le "+getName()+"§9 s'est trompé, il mourra la nuit suivante.");
}
}
callback.run();
}
@EventHandler LGPlayerKilledEvent killEvent = new LGPlayerKilledEvent(getGame(), choosen, Reason.DICTATOR);
public void onNight(LGDayEndEvent e) { Bukkit.getPluginManager().callEvent(killEvent);
if(e.getGame() == getGame()) { if (killEvent.isCancelled()) return;
LGPlayer lgp = getGame().getDeaths().get(Reason.DICTATOR_SUICIDE); if (getGame().kill(killEvent.getKilled(), killEvent.getReason(), true))
if(lgp != null) return;
lgp.sendMessage("§8§oDes pensées sombres hantent ton esprit...");
} if (roleType != RoleType.VILLAGER) {
} getGame().broadcastMessage("§7§l" + dicta.getName() + " §9devient le §5§lCapitaine§9 du village.");
getGame().setMayor(dicta);
} else {
getGame().kill(dicta, Reason.DICTATOR_SUICIDE);
for (LGPlayer lgp : getGame().getInGame()) {
if (lgp == dicta)
lgp.sendMessage("§9§oÇa ne s'est pas passé comme prévu...");
else
lgp.sendMessage("§9Le " + getName() + "§9 s'est trompé, il mourra la nuit suivante.");
}
}
callback.run();
}
@EventHandler
public void onNight(LGDayEndEvent e) {
if (e.getGame() == getGame()) {
LGPlayer lgp = getGame().getDeaths().get(Reason.DICTATOR_SUICIDE);
if (lgp != null)
lgp.sendMessage("§8§oDes pensées sombres hantent ton esprit...");
}
}
} }

View file

@ -1,112 +1,115 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import java.util.Random;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent; import fr.leomelki.loupgarou.events.LGPlayerKilledEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
public class REnfantSauvage extends Role{ import java.util.Random;
public REnfantSauvage(LGGame game) {
super(game);
}
@Override public class REnfantSauvage extends Role {
public String getName() { private static final Random random = new Random();
return "§a§lEnfant-Sauvage";
}
@Override public REnfantSauvage(LGGame game) {
public String getFriendlyName() { super(game);
return "de l'"+getName(); }
}
@Override @Override
public String getShortDescription() { public String getName() {
return "Tu gagnes avec le §a§lVillage"; return "§a§lEnfant-Sauvage";
} }
@Override @Override
public String getDescription() { public String getFriendlyName() {
return "Tu gagnes avec le §a§lVillage§f. Au début de la première nuit, tu dois choisir un joueur comme modèle. S'il meurt au cours de la partie, tu deviendras un §c§lLoup-Garou§f."; return "de l'" + getName();
} }
@Override @Override
public String getTask() { public String getShortDescription() {
return "Qui veux-tu prendre comme modèle ?"; return "Tu gagnes avec le §a§lVillage";
} }
@Override @Override
public String getBroadcastedTask() { public String getDescription() {
return "L'"+getName()+"§9 cherche ses marques..."; return "Tu gagnes avec le §a§lVillage§f. Au début de la première nuit, tu dois choisir un joueur comme modèle. S'il meurt au cours de la partie, tu deviendras un §c§lLoup-Garou§f.";
} }
@Override
public RoleType getType() {
return RoleType.VILLAGER;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@Override @Override
public int getTimeout() { public String getTask() {
return 15; return "Qui veux-tu prendre comme modèle ?";
} }
@Override @Override
protected void onNightTurn(LGPlayer player, Runnable callback) { public String getBroadcastedTask() {
player.showView(); return "L'" + getName() + "§9 cherche ses marques...";
player.sendMessage("§6Choisissez votre modèle."); }
player.choose(choosen -> {
if(choosen != null) {
player.stopChoosing();
player.sendMessage("§6Si §7§l"+choosen.getName()+"§6 meurt, tu deviendras §c§lLoup-Garou§6.");
player.sendActionBarMessage("§7§l"+choosen.getName()+"§6 est ton modèle");
player.getCache().set("enfant_svg", choosen);
choosen.getCache().set("enfant_svg_d", player);
getPlayers().remove(player);//Pour éviter qu'il puisse avoir plusieurs modèles
player.hideView();
callback.run();
}
}, player);
}
private static final Random random = new Random();
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.stopChoosing();
player.hideView();
LGPlayer choosen = null;
while(choosen == null || choosen == player)
choosen = getGame().getAlive().get(random.nextInt(getGame().getAlive().size()));
player.sendMessage("§6Si §7§l"+choosen.getName()+"§6 meurt, tu deviendras §c§lLoup-Garou§6.");
player.sendActionBarMessage("§7§l"+choosen.getName()+"§6 est ton modèle");
player.getCache().set("enfant_svg", choosen);
choosen.getCache().set("enfant_svg_d", player);
getPlayers().remove(player);
}
@EventHandler(priority = EventPriority.HIGHEST) @Override
public void onPlayerKilled(LGPlayerKilledEvent e) { public RoleType getType() {
if(e.getGame() == getGame()) return RoleType.VILLAGER;
if(e.getKilled().getCache().has("enfant_svg_d")) { }
LGPlayer enfant = e.getKilled().getCache().remove("enfant_svg_d");
if(!enfant.isDead() && enfant.getCache().remove("enfant_svg") == e.getKilled() && enfant.isRoleActive()) {
enfant.sendMessage("§7§l"+e.getKilled().getName()+"§6 est mort, tu deviens un §c§lLoup-Garou§6.");
REnfantSauvageLG lgEnfantSvg = null;
for(Role role : getGame().getRoles())
if(role instanceof REnfantSauvageLG)
lgEnfantSvg = (REnfantSauvageLG)role;
if(lgEnfantSvg == null) @Override
getGame().getRoles().add(lgEnfantSvg = new REnfantSauvageLG(getGame())); public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
lgEnfantSvg.join(enfant, false); @Override
} public int getTimeout() {
} return 15;
} }
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
player.showView();
player.sendMessage("§6Choisissez votre modèle.");
player.choose(choosen -> {
if (choosen != null) {
player.stopChoosing();
player.sendMessage("§6Si §7§l" + choosen.getName() + "§6 meurt, tu deviendras §c§lLoup-Garou§6.");
player.sendActionBarMessage("§7§l" + choosen.getName() + "§6 est ton modèle");
player.getCache().set("enfant_svg", choosen);
choosen.getCache().set("enfant_svg_d", player);
getPlayers().remove(player);//Pour éviter qu'il puisse avoir plusieurs modèles
player.hideView();
callback.run();
}
}, player);
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.stopChoosing();
player.hideView();
LGPlayer choosen = null;
while (choosen == null || choosen == player)
choosen = getGame().getAlive().get(random.nextInt(getGame().getAlive().size()));
player.sendMessage("§6Si §7§l" + choosen.getName() + "§6 meurt, tu deviendras §c§lLoup-Garou§6.");
player.sendActionBarMessage("§7§l" + choosen.getName() + "§6 est ton modèle");
player.getCache().set("enfant_svg", choosen);
choosen.getCache().set("enfant_svg_d", player);
getPlayers().remove(player);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerKilled(LGPlayerKilledEvent e) {
if (e.getGame() == getGame())
if (e.getKilled().getCache().has("enfant_svg_d")) {
LGPlayer enfant = e.getKilled().getCache().remove("enfant_svg_d");
if (!enfant.isDead() && enfant.getCache().remove("enfant_svg") == e.getKilled() && enfant.isRoleActive()) {
enfant.sendMessage("§7§l" + e.getKilled().getName() + "§6 est mort, tu deviens un §c§lLoup-Garou§6.");
REnfantSauvageLG lgEnfantSvg = null;
for (Role role : getGame().getRoles())
if (role instanceof REnfantSauvageLG)
lgEnfantSvg = (REnfantSauvageLG) role;
if (lgEnfantSvg == null)
getGame().getRoles().add(lgEnfantSvg = new REnfantSauvageLG(getGame()));
lgEnfantSvg.join(enfant, false);
}
}
}
} }

View file

@ -1,82 +1,84 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import org.bukkit.potion.PotionEffectType;
import fr.leomelki.loupgarou.classes.LGCustomItems; import fr.leomelki.loupgarou.classes.LGCustomItems;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import org.bukkit.potion.PotionEffectType;
import java.util.Comparator; import java.util.Comparator;
public class REnfantSauvageLG extends Role{ public class REnfantSauvageLG extends Role {
public REnfantSauvageLG(LGGame game) { public REnfantSauvageLG(LGGame game) {
super(game); super(game);
} }
@Override
public String getName() {
for(LGPlayer lgp : getPlayers())
if(lgp.getPlayer() != null && lgp.getPlayer().hasPotionEffect(PotionEffectType.INVISIBILITY))
return "§c§lEnfant-Sauvage";
return (getPlayers().size() > 0 ? "§a" : "§c")+"§lEnfant-Sauvage";
}
@Override @Override
public String getFriendlyName() { public String getName() {
return "de l'"+getName(); for (LGPlayer lgp : getPlayers())
} if (lgp.getPlayer() != null && lgp.getPlayer().hasPotionEffect(PotionEffectType.INVISIBILITY))
return "§c§lEnfant-Sauvage";
return (getPlayers().size() > 0 ? "§a" : "§c") + "§lEnfant-Sauvage";
}
@Override @Override
public String getShortDescription() { public String getFriendlyName() {
return "Tu gagnes avec le §a§lVillage"; return "de l'" + getName();
} }
@Override @Override
public String getDescription() { public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage§f. Au début de la première nuit, tu dois choisir un joueur comme modèle. S'il meurt au cours de la partie, tu deviendras un §c§lLoup-Garou§f."; return "Tu gagnes avec le §a§lVillage";
} }
@Override @Override
public String getTask() { public String getDescription() {
return "Qui veux-tu prendre comme modèle ?"; return "Tu gagnes avec le §a§lVillage§f. Au début de la première nuit, tu dois choisir un joueur comme modèle. S'il meurt au cours de la partie, tu deviendras un §c§lLoup-Garou§f.";
} }
@Override @Override
public String getBroadcastedTask() { public String getTask() {
return "L'"+getName()+"§9 cherche ses marques..."; return "Qui veux-tu prendre comme modèle ?";
} }
@Override
public RoleType getType() {
return RoleType.LOUP_GAROU;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.LOUP_GAROU;
}
@Override @Override
public int getTimeout() { public String getBroadcastedTask() {
return -1; return "L'" + getName() + "§9 cherche ses marques...";
} }
@Override @Override
public void join(LGPlayer player, boolean sendMessage) { public RoleType getType() {
super.join(player, sendMessage); return RoleType.LOUP_GAROU;
player.setRole(this); }
LGCustomItems.updateItem(player);
RLoupGarou lgRole = null;
for(Role role : getGame().getRoles())
if(role instanceof RLoupGarou)
lgRole = (RLoupGarou)role;
if(lgRole == null) { @Override
getGame().getRoles().add(lgRole = new RLoupGarou(getGame())); public RoleWinType getWinType() {
return RoleWinType.LOUP_GAROU;
}
getGame().getRoles().sort(Comparator.comparingInt(Role::getTurnOrder)); @Override
} public int getTimeout() {
return -1;
}
lgRole.join(player, false); @Override
for(LGPlayer lgp : lgRole.getPlayers()) public void join(LGPlayer player, boolean sendMessage) {
if(lgp != player) super.join(player, sendMessage);
lgp.sendMessage("§7§l"+player.getName()+"§6 a rejoint les §c§lLoups-Garous§6."); player.setRole(this);
} LGCustomItems.updateItem(player);
RLoupGarou lgRole = null;
for (Role role : getGame().getRoles())
if (role instanceof RLoupGarou)
lgRole = (RLoupGarou) role;
if (lgRole == null) {
getGame().getRoles().add(lgRole = new RLoupGarou(getGame()));
getGame().getRoles().sort(Comparator.comparingInt(Role::getTurnOrder));
}
lgRole.join(player, false);
for (LGPlayer lgp : lgRole.getPlayers())
if (lgp != player)
lgp.sendMessage("§7§l" + player.getName() + "§6 a rejoint les §c§lLoups-Garous§6.");
}
} }

View file

@ -1,136 +1,144 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import java.util.List;
import java.util.Random;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import fr.leomelki.loupgarou.MainLg; import fr.leomelki.loupgarou.MainLg;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent; import fr.leomelki.loupgarou.events.LGPlayerKilledEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason; import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
public class RFaucheur extends Role{ import java.util.List;
public RFaucheur(LGGame game) { import java.util.Random;
super(game);
}
@Override
public RoleType getType() {
return RoleType.VILLAGER;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@Override
public String getName() {
return "§a§lFaucheur";
}
@Override
public String getFriendlyName() {
return "du "+getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. Si les §c§lLoups-Garous§f te tuent pendant la nuit, tu emporteras lun dentre eux dans ta mort, mais si tu meurs lors du vote du §a§lvillage§f, ce sont tes deux voisins qui en paieront le prix.";
}
@Override
public String getTask() {
return "";
}
@Override
public String getBroadcastedTask() {
return "";
}
@Override
public int getTimeout() {
return -1;
}
private static final Random random = new Random(); public class RFaucheur extends Role {
private static final Random random = new Random();
@EventHandler(priority = EventPriority.LOWEST) public RFaucheur(LGGame game) {
public void onKill(LGPlayerKilledEvent e) { super(game);
if (e.getKilled().getRole() == this && e.getKilled().isRoleActive()) { }
LGPlayer killed = e.getKilled();
if(killed.getCache().getBoolean("faucheur_did"))//A déjà fait son coup de faucheur !
return;
killed.getCache().set("faucheur_did", true);
if (e.getReason() == Reason.LOUP_GAROU || e.getReason() == Reason.GM_LOUP_GAROU) {//car le switch buggait (wtf)
// Mort par les LG
// Tue un lg au hasard
LGPlayer selected = null;
for (Role role : getGame().getRoles())
if (role instanceof RLoupGarou)
selected = role.getPlayers().get(random.nextInt(role.getPlayers().size()));
if (selected != null) {
LGPlayerKilledEvent killEvent = new LGPlayerKilledEvent(getGame(), e.getKilled(), e.getReason());
Bukkit.getPluginManager().callEvent(killEvent);
e.setKilled(selected);
e.setReason(Reason.FAUCHEUR);
if (killEvent.isCancelled())
return;
getGame().kill(killEvent.getKilled(), killEvent.getReason(), false);
}
} else if (e.getReason() == Reason.VOTE) {
List<?> original = MainLg.getInstance().getConfig().getList("spawns");
int size = original.size();
// double middle = ((double)size)/2D;
int killedPlace = killed.getPlace();
LGPlayer droite = null, gauche = null; @Override
for (int i = killedPlace + 1;; i++) { public RoleType getType() {
if (i == size) return RoleType.VILLAGER;
i = 0; }
LGPlayer lgp = getGame().getPlacements().get(i);
if (lgp != null && !lgp.isDead()) {
droite = lgp;
break;
}
if (lgp == killed)// Fait un tour complet
break;
}
for (int i = killedPlace - 1;; i--) {
if (i == -1)
i = size - 1;
LGPlayer lgp = getGame().getPlacements().get(i);
if (lgp != null && !lgp.isDead()) {
gauche = lgp;
break;
}
if (lgp == killed)// Fait un tour complet
break;
}
if (droite != null) {
LGPlayerKilledEvent killEvent = new LGPlayerKilledEvent(getGame(), e.getKilled(), e.getReason());
Bukkit.getPluginManager().callEvent(killEvent);
e.setKilled(droite); @Override
e.setReason(Reason.FAUCHEUR); public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
if (!killEvent.isCancelled()) @Override
getGame().kill(killEvent.getKilled(), killEvent.getReason(), false); public String getName() {
} return "§a§lFaucheur";
if (gauche != null) { }
LGPlayerKilledEvent killEvent;
if (droite == null) { @Override
killEvent = new LGPlayerKilledEvent(getGame(), e.getKilled(), e.getReason()); public String getFriendlyName() {
e.setKilled(gauche); return "du " + getName();
e.setReason(Reason.FAUCHEUR); }
} else
killEvent = new LGPlayerKilledEvent(getGame(), gauche, Reason.FAUCHEUR); @Override
Bukkit.getPluginManager().callEvent(killEvent); public String getShortDescription() {
if (!killEvent.isCancelled()) return "Tu gagnes avec le §a§lVillage";
getGame().kill(killEvent.getKilled(), killEvent.getReason(), false); }
}
} @Override
} public String getDescription() {
} return "Tu gagnes avec le §a§lVillage§f. Si les §c§lLoups-Garous§f te tuent pendant la nuit, tu emporteras lun dentre eux dans ta mort, mais si tu meurs lors du vote du §a§lvillage§f, ce sont tes deux voisins qui en paieront le prix.";
}
@Override
public String getTask() {
return "";
}
@Override
public String getBroadcastedTask() {
return "";
}
@Override
public int getTimeout() {
return -1;
}
@EventHandler(priority = EventPriority.LOWEST)
public void onKill(LGPlayerKilledEvent e) {
if (e.getKilled().getRole() == this && e.getKilled().isRoleActive()) {
LGPlayer killed = e.getKilled();
if (killed.getCache().getBoolean("faucheur_did"))//A déjà fait son coup de faucheur !
return;
killed.getCache().set("faucheur_did", true);
if (e.getReason() == Reason.LOUP_GAROU || e.getReason() == Reason.GM_LOUP_GAROU) {//car le switch buggait (wtf)
// Mort par les LG
// Tue un lg au hasard
LGPlayer selected = null;
for (Role role : getGame().getRoles())
if (role instanceof RLoupGarou)
selected = role.getPlayers().get(random.nextInt(role.getPlayers().size()));
if (selected != null) {
LGPlayerKilledEvent killEvent = new LGPlayerKilledEvent(getGame(), e.getKilled(), e.getReason());
Bukkit.getPluginManager().callEvent(killEvent);
e.setKilled(selected);
e.setReason(Reason.FAUCHEUR);
if (killEvent.isCancelled())
return;
getGame().kill(killEvent.getKilled(), killEvent.getReason(), false);
}
} else if (e.getReason() == Reason.VOTE) {
List<?> original = MainLg.getInstance().getConfig().getList("spawns");
int size = original.size();
// double middle = ((double)size)/2D;
int killedPlace = killed.getPlace();
LGPlayer droite = null, gauche = null;
for (int i = killedPlace + 1; ; i++) {
if (i == size)
i = 0;
LGPlayer lgp = getGame().getPlacements().get(i);
if (lgp != null && !lgp.isDead()) {
droite = lgp;
break;
}
if (lgp == killed)// Fait un tour complet
break;
}
for (int i = killedPlace - 1; ; i--) {
if (i == -1)
i = size - 1;
LGPlayer lgp = getGame().getPlacements().get(i);
if (lgp != null && !lgp.isDead()) {
gauche = lgp;
break;
}
if (lgp == killed)// Fait un tour complet
break;
}
if (droite != null) {
LGPlayerKilledEvent killEvent = new LGPlayerKilledEvent(getGame(), e.getKilled(), e.getReason());
Bukkit.getPluginManager().callEvent(killEvent);
e.setKilled(droite);
e.setReason(Reason.FAUCHEUR);
if (!killEvent.isCancelled())
getGame().kill(killEvent.getKilled(), killEvent.getReason(), false);
}
if (gauche != null) {
LGPlayerKilledEvent killEvent;
if (droite == null) {
killEvent = new LGPlayerKilledEvent(getGame(), e.getKilled(), e.getReason());
e.setKilled(gauche);
e.setReason(Reason.FAUCHEUR);
} else
killEvent = new LGPlayerKilledEvent(getGame(), gauche, Reason.FAUCHEUR);
Bukkit.getPluginManager().callEvent(killEvent);
if (!killEvent.isCancelled())
getGame().kill(killEvent.getKilled(), killEvent.getReason(), false);
}
}
}
}
} }

View file

@ -1,115 +1,125 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import java.util.Arrays;
import java.util.List;
import org.bukkit.event.EventHandler;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGNightPlayerPreKilledEvent; import fr.leomelki.loupgarou.events.LGNightPlayerPreKilledEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason; import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import fr.leomelki.loupgarou.events.LGPreDayStartEvent; import fr.leomelki.loupgarou.events.LGPreDayStartEvent;
import fr.leomelki.loupgarou.events.LGVampiredEvent; import fr.leomelki.loupgarou.events.LGVampiredEvent;
import org.bukkit.event.EventHandler;
public class RGarde extends Role{ import java.util.Arrays;
public RGarde(LGGame game) { import java.util.List;
super(game);
}
@Override
public RoleType getType() {
return RoleType.VILLAGER;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@Override
public String getName() {
return "§a§lGarde";
}
@Override
public String getFriendlyName() {
return "du "+getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. Chaque nuit, tu peux te protéger toi ou quelqu'un d'autre des attaques §c§lhostiles§f. Tu ne peux pas protéger deux fois daffilé la même personne.";
}
@Override
public String getTask() {
return "Choisis un joueur à protéger.";
}
@Override
public String getBroadcastedTask() {
return "Le "+getName()+"§9 choisit un joueur à protéger.";
}
@Override public class RGarde extends Role {
public int getTimeout() { private static final List<Reason> reasonsProtected = Arrays.asList(Reason.LOUP_GAROU, Reason.LOUP_BLANC, Reason.GM_LOUP_GAROU, Reason.ASSASSIN);
return 15;
}
@Override public RGarde(LGGame game) {
protected void onNightTurn(LGPlayer player, Runnable callback) { super(game);
player.showView(); }
player.choose(choosen -> { @Override
if(choosen != null) { public RoleType getType() {
LGPlayer lastProtected = player.getCache().get("garde_lastProtected"); return RoleType.VILLAGER;
if(choosen == lastProtected) { }
if(lastProtected == player)
player.sendMessage("§4§oTu t'es déjà protégé la nuit dernière.");
else
player.sendMessage("§4§oTu as déjà protégé §7§l§o"+lastProtected.getName()+"§4§o la nuit dernière.");
} else {
if(choosen == player) {
player.sendMessage("§6Tu décides de te protéger toi-même cette nuit.");
player.sendActionBarMessage("§9Tu seras protégé.");
} else {
player.sendMessage("§6Tu vas protéger §7§l"+choosen.getName()+"§6 cette nuit.");
player.sendActionBarMessage("§7§l"+choosen.getName()+"§9 sera protégé.");
}
choosen.getCache().set("garde_protected", true);
player.getCache().set("garde_lastProtected", choosen);
player.stopChoosing();
player.hideView();
callback.run();
}
}
});
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.getCache().remove("garde_lastProtected");
player.stopChoosing();
player.hideView();
//player.sendTitle("§cVous n'avez protégé personne.", "§4Vous avez mis trop de temps à vous décider...", 80);
//player.sendMessage("§cVous n'avez protégé personne cette nuit.");
}
private static final List<Reason> reasonsProtected = Arrays.asList(Reason.LOUP_GAROU, Reason.LOUP_BLANC, Reason.GM_LOUP_GAROU, Reason.ASSASSIN); @Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@EventHandler @Override
public void onPlayerKill(LGNightPlayerPreKilledEvent e) { public String getName() {
if(e.getGame() == getGame() && reasonsProtected.contains(e.getReason()) && e.getKilled().getCache().getBoolean("garde_protected")) { return "§a§lGarde";
e.getKilled().getCache().remove("garde_protected"); }
e.setReason(Reason.DONT_DIE);
} @Override
} public String getFriendlyName() {
@EventHandler return "du " + getName();
public void onVampired(LGVampiredEvent e) { }
if(e.getGame() == getGame() && e.getPlayer().getCache().getBoolean("garde_protected"))
e.setProtect(true); @Override
} public String getShortDescription() {
@EventHandler return "Tu gagnes avec le §a§lVillage";
public void onDayStart(LGPreDayStartEvent e) { }
if(e.getGame() == getGame())
for(LGPlayer lgp : getGame().getInGame()) @Override
lgp.getCache().remove("garde_protected"); public String getDescription() {
} return "Tu gagnes avec le §a§lVillage§f. Chaque nuit, tu peux te protéger toi ou quelqu'un d'autre des attaques §c§lhostiles§f. Tu ne peux pas protéger deux fois daffilé la même personne.";
}
@Override
public String getTask() {
return "Choisis un joueur à protéger.";
}
@Override
public String getBroadcastedTask() {
return "Le " + getName() + "§9 choisit un joueur à protéger.";
}
@Override
public int getTimeout() {
return 15;
}
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
player.showView();
player.choose(choosen -> {
if (choosen != null) {
LGPlayer lastProtected = player.getCache().get("garde_lastProtected");
if (choosen == lastProtected) {
if (lastProtected == player)
player.sendMessage("§4§oTu t'es déjà protégé la nuit dernière.");
else
player.sendMessage("§4§oTu as déjà protégé §7§l§o" + lastProtected.getName() + "§4§o la nuit dernière.");
} else {
if (choosen == player) {
player.sendMessage("§6Tu décides de te protéger toi-même cette nuit.");
player.sendActionBarMessage("§9Tu seras protégé.");
} else {
player.sendMessage("§6Tu vas protéger §7§l" + choosen.getName() + "§6 cette nuit.");
player.sendActionBarMessage("§7§l" + choosen.getName() + "§9 sera protégé.");
}
choosen.getCache().set("garde_protected", true);
player.getCache().set("garde_lastProtected", choosen);
player.stopChoosing();
player.hideView();
callback.run();
}
}
});
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.getCache().remove("garde_lastProtected");
player.stopChoosing();
player.hideView();
//player.sendTitle("§cVous n'avez protégé personne.", "§4Vous avez mis trop de temps à vous décider...", 80);
//player.sendMessage("§cVous n'avez protégé personne cette nuit.");
}
@EventHandler
public void onPlayerKill(LGNightPlayerPreKilledEvent e) {
if (e.getGame() == getGame() && reasonsProtected.contains(e.getReason()) && e.getKilled().getCache().getBoolean("garde_protected")) {
e.getKilled().getCache().remove("garde_protected");
e.setReason(Reason.DONT_DIE);
}
}
@EventHandler
public void onVampired(LGVampiredEvent e) {
if (e.getGame() == getGame() && e.getPlayer().getCache().getBoolean("garde_protected"))
e.setProtect(true);
}
@EventHandler
public void onDayStart(LGPreDayStartEvent e) {
if (e.getGame() == getGame())
for (LGPlayer lgp : getGame().getInGame())
lgp.getCache().remove("garde_protected");
}
} }

View file

@ -1,106 +1,108 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import org.bukkit.event.EventHandler;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent; import fr.leomelki.loupgarou.events.LGPlayerKilledEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason; import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import org.bukkit.event.EventHandler;
public class RGrandMechantLoup extends Role{ public class RGrandMechantLoup extends Role {
public RGrandMechantLoup(LGGame game) { boolean lgDied;
super(game); Runnable callback;
}
@Override public RGrandMechantLoup(LGGame game) {
public String getName() { super(game);
return "§c§lGrand Méchant Loup"; }
}
@Override @Override
public String getFriendlyName() { public String getName() {
return "du "+getName(); return "§c§lGrand Méchant Loup";
} }
@Override @Override
public String getShortDescription() { public String getFriendlyName() {
return "Tu gagnes avec les §c§lLoups-Garous"; return "du " + getName();
} }
@Override @Override
public String getDescription() { public String getShortDescription() {
return "Tu gagnes avec les §c§lLoups-Garous§f. Chaque nuit, tu te réunis avec tes compères pour décider d'une victime à éliminer... Tant qu'aucun autre §c§lLoup§f n'est mort, tu peux, chaque nuit, dévorer une victime supplémentaire."; return "Tu gagnes avec les §c§lLoups-Garous";
} }
@Override @Override
public String getTask() { public String getDescription() {
return "Choisis un joueur à dévorer."; return "Tu gagnes avec les §c§lLoups-Garous§f. Chaque nuit, tu te réunis avec tes compères pour décider d'une victime à éliminer... Tant qu'aucun autre §c§lLoup§f n'est mort, tu peux, chaque nuit, dévorer une victime supplémentaire.";
} }
@Override @Override
public String getBroadcastedTask() { public String getTask() {
return "Le §c§lGrand Méchant Loup§9 n'en a pas terminé..."; return "Choisis un joueur à dévorer.";
} }
@Override
public RoleType getType() {
return RoleType.LOUP_GAROU;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.LOUP_GAROU;
}
@Override @Override
public int getTimeout() { public String getBroadcastedTask() {
return 15; return "Le §c§lGrand Méchant Loup§9 n'en a pas terminé...";
} }
@Override @Override
public boolean hasPlayersLeft() { public RoleType getType() {
return super.hasPlayersLeft() && !lgDied; return RoleType.LOUP_GAROU;
} }
boolean lgDied;
Runnable callback;
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
this.callback = callback;
player.showView(); @Override
player.choose(choosen -> { public RoleWinType getWinType() {
if(choosen != null && choosen != player) { return RoleWinType.LOUP_GAROU;
player.sendActionBarMessage("§e§l"+choosen.getName()+"§6 va mourir cette nuit"); }
player.sendMessage("§6Tu as choisi de manger §7§l"+choosen.getName()+"§6.");
getGame().kill(choosen, getGame().getDeaths().containsKey(Reason.LOUP_GAROU) ? Reason.GM_LOUP_GAROU : Reason.LOUP_GAROU);
player.stopChoosing();
player.hideView();
callback.run();
}
});
}
@EventHandler @Override
public void onPlayerDie(LGPlayerKilledEvent e) {//Quand un Loup-Garou meurt, les grands méchants loups ne peuvent plus jouer. public int getTimeout() {
if(e.getGame() == getGame()) return 15;
if(e.getKilled().getRoleType() == RoleType.LOUP_GAROU) }
lgDied = true;
} @Override
public boolean hasPlayersLeft() {
return super.hasPlayersLeft() && !lgDied;
}
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
this.callback = callback;
player.showView();
player.choose(choosen -> {
if (choosen != null && choosen != player) {
player.sendActionBarMessage("§e§l" + choosen.getName() + "§6 va mourir cette nuit");
player.sendMessage("§6Tu as choisi de manger §7§l" + choosen.getName() + "§6.");
getGame().kill(choosen, getGame().getDeaths().containsKey(Reason.LOUP_GAROU) ? Reason.GM_LOUP_GAROU : Reason.LOUP_GAROU);
player.stopChoosing();
player.hideView();
callback.run();
}
});
}
@EventHandler
public void onPlayerDie(LGPlayerKilledEvent e) {//Quand un Loup-Garou meurt, les grands méchants loups ne peuvent plus jouer.
if (e.getGame() == getGame())
if (e.getKilled().getRoleType() == RoleType.LOUP_GAROU)
lgDied = true;
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.stopChoosing();
player.hideView();
player.sendMessage("§6Tu n'as tué personne.");
}
@Override @Override
protected void onNightTurnTimeout(LGPlayer player) { public void join(LGPlayer player, boolean sendMessage) {
player.stopChoosing(); super.join(player, sendMessage);
player.hideView(); for (Role role : getGame().getRoles())
player.sendMessage("§6Tu n'as tué personne."); if (role instanceof RLoupGarou)
} role.join(player, false);
}
@Override
public void join(LGPlayer player, boolean sendMessage) {
super.join(player, sendMessage);
for(Role role : getGame().getRoles())
if(role instanceof RLoupGarou)
role.join(player, false);
}
} }

View file

@ -1,193 +1,190 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerScoreboardTeam;
import fr.leomelki.loupgarou.classes.*;
import fr.leomelki.loupgarou.classes.chat.LGChat;
import fr.leomelki.loupgarou.events.*;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import lombok.Getter;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map.Entry; import java.util.Map.Entry;
import org.bukkit.event.EventHandler; public class RLoupGarou extends Role {
import org.bukkit.event.EventPriority;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerScoreboardTeam; @Getter
import fr.leomelki.loupgarou.classes.LGCustomSkin; private final LGChat chat = new LGChat((sender, message) -> "§c" + sender.getName() + " §6» §f" + message);
import fr.leomelki.loupgarou.classes.LGGame; boolean showSkins = false;
import fr.leomelki.loupgarou.classes.LGPlayer; LGVote vote;
import fr.leomelki.loupgarou.classes.LGVote;
import fr.leomelki.loupgarou.classes.LGWinType;
import fr.leomelki.loupgarou.classes.chat.LGChat;
import fr.leomelki.loupgarou.events.LGDayEndEvent;
import fr.leomelki.loupgarou.events.LGGameEndEvent;
import fr.leomelki.loupgarou.events.LGNightEndEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import fr.leomelki.loupgarou.events.LGSkinLoadEvent;
import fr.leomelki.loupgarou.events.LGUpdatePrefixEvent;
import lombok.Getter;
public class RLoupGarou extends Role{ public RLoupGarou(LGGame game) {
super(game);
}
public RLoupGarou(LGGame game) { @Override
super(game); public String getName() {
} return "§c§lLoup-Garou";
}
@Override @Override
public String getName() { public String getFriendlyName() {
return "§c§lLoup-Garou"; return "des §c§lLoups-Garous";
} }
@Override @Override
public String getFriendlyName() { public String getShortDescription() {
return "des §c§lLoups-Garous"; return "Tu gagnes avec les §c§lLoups-Garous";
} }
@Override @Override
public String getShortDescription() { public String getDescription() {
return "Tu gagnes avec les §c§lLoups-Garous"; return "Tu gagnes avec les §c§lLoups-Garous§f. Chaque nuit, tu te réunis avec tes compères pour décider d'une victime à éliminer.";
} }
@Override @Override
public String getDescription() { public String getTask() {
return "Tu gagnes avec les §c§lLoups-Garous§f. Chaque nuit, tu te réunis avec tes compères pour décider d'une victime à éliminer."; return "Vote pour la cible à tuer.";
} }
@Override @Override
public String getTask() { public String getBroadcastedTask() {
return "Vote pour la cible à tuer."; return "Les §c§lLoups-Garous§9 choisissent leur cible.";
} }
@Override @Override
public String getBroadcastedTask() { public RoleType getType() {
return "Les §c§lLoups-Garous§9 choisissent leur cible."; return RoleType.LOUP_GAROU;
} }
@Override
public RoleType getType() {
return RoleType.LOUP_GAROU;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.LOUP_GAROU;
}
@Override @Override
public int getTimeout() { public RoleWinType getWinType() {
return 30; return RoleWinType.LOUP_GAROU;
} }
@Getter private final LGChat chat = new LGChat((sender, message) -> "§c"+sender.getName()+" §6» §f"+message); @Override
public int getTimeout() {
return 30;
}
boolean showSkins = false; @Override
LGVote vote; public void join(LGPlayer player, boolean sendMessage) {
@Override super.join(player, sendMessage);
public void join(LGPlayer player, boolean sendMessage) { //On peut créer des cheats grâce à ça (qui permettent de savoir qui est lg/inf)
super.join(player, sendMessage); for (LGPlayer p : getPlayers())
//On peut créer des cheats grâce à ça (qui permettent de savoir qui est lg/inf) p.updatePrefix();
for(LGPlayer p : getPlayers()) }
p.updatePrefix();
}
public void onNightTurn(Runnable callback) { public void onNightTurn(Runnable callback) {
vote = new LGVote(getTimeout(), getTimeout()/3, getGame(), false, false, (player, secondsLeft)-> !getPlayers().contains(player) ? "§6C'est au tour "+getFriendlyName()+" §6(§e"+secondsLeft+" s§6)" : player.getCache().has("vote") ? "§l§9Vous votez contre §c§l"+player.getCache().<LGPlayer>get("vote").getName() : "§6Il vous reste §e"+secondsLeft+" seconde"+(secondsLeft > 1 ? "s" : "")+"§6 pour voter"); vote = new LGVote(getTimeout(), getTimeout() / 3, getGame(), false, false, (player, secondsLeft) -> !getPlayers().contains(player) ? "§6C'est au tour " + getFriendlyName() + " §6(§e" + secondsLeft + " s§6)" : player.getCache().has("vote") ? "§l§9Vous votez contre §c§l" + player.getCache().<LGPlayer>get("vote").getName() : "§6Il vous reste §e" + secondsLeft + " seconde" + (secondsLeft > 1 ? "s" : "") + "§6 pour voter");
for(LGPlayer lgp : getGame().getAlive()) for (LGPlayer lgp : getGame().getAlive())
if(lgp.getRoleType() == RoleType.LOUP_GAROU) if (lgp.getRoleType() == RoleType.LOUP_GAROU)
lgp.showView(); lgp.showView();
for(LGPlayer player : getPlayers()) { for (LGPlayer player : getPlayers()) {
player.sendMessage("§6"+getTask()); player.sendMessage("§6" + getTask());
// player.sendTitle("§6C'est à vous de jouer", "§a"+getTask(), 100); // player.sendTitle("§6C'est à vous de jouer", "§a"+getTask(), 100);
player.joinChat(chat); player.joinChat(chat);
} }
vote.start(getPlayers(), getPlayers(), ()->{ vote.start(getPlayers(), getPlayers(), () -> {
onNightTurnEnd(); onNightTurnEnd();
callback.run(); callback.run();
}); });
} }
private void onNightTurnEnd() {
for(LGPlayer lgp : getGame().getAlive())
if(lgp.getRoleType() == RoleType.LOUP_GAROU)
lgp.hideView();
for(LGPlayer player : getPlayers()) {
player.leaveChat();
}
LGPlayer choosen = vote.getChoosen(); private void onNightTurnEnd() {
if(choosen == null) { for (LGPlayer lgp : getGame().getAlive())
if(vote.getVotes().size() > 0) { if (lgp.getRoleType() == RoleType.LOUP_GAROU)
int max = 0; lgp.hideView();
boolean equal = false; for (LGPlayer player : getPlayers()) {
for(Entry<LGPlayer, List<LGPlayer>> entry : vote.getVotes().entrySet()) player.leaveChat();
if(entry.getValue().size() > max) { }
equal = false;
max = entry.getValue().size();
choosen = entry.getKey();
}else if(entry.getValue().size() == max)
equal = true;
if(equal) {
choosen = null;
ArrayList<LGPlayer> choosable = new ArrayList<>();
for(Entry<LGPlayer, List<LGPlayer>> entry : vote.getVotes().entrySet())
if(entry.getValue().size() == max && entry.getKey().getRoleType() != RoleType.LOUP_GAROU)
choosable.add(entry.getKey());
if(choosable.size() > 0)
choosen = choosable.get(getGame().getRandom().nextInt(choosable.size()));
}
}
}
if(choosen != null) {
getGame().kill(choosen, Reason.LOUP_GAROU);
for(LGPlayer player : getPlayers())
player.sendMessage("§6Les §c§lLoups§6 ont décidé de tuer §7§l"+choosen.getName()+"§6.");
}else
for(LGPlayer player : getPlayers())
player.sendMessage("§6Personne n'a été désigné pour mourir.");
}
@EventHandler LGPlayer choosen = vote.getChoosen();
public void onGameJoin(LGGameEndEvent e) { if (choosen == null) {
if(e.getGame() == getGame()) { if (vote.getVotes().size() > 0) {
WrapperPlayServerScoreboardTeam teamDelete = new WrapperPlayServerScoreboardTeam(); int max = 0;
teamDelete.setMode(1); boolean equal = false;
teamDelete.setName("loup_garou_list"); for (Entry<LGPlayer, List<LGPlayer>> entry : vote.getVotes().entrySet())
if (entry.getValue().size() > max) {
equal = false;
max = entry.getValue().size();
choosen = entry.getKey();
} else if (entry.getValue().size() == max)
equal = true;
if (equal) {
choosen = null;
ArrayList<LGPlayer> choosable = new ArrayList<>();
for (Entry<LGPlayer, List<LGPlayer>> entry : vote.getVotes().entrySet())
if (entry.getValue().size() == max && entry.getKey().getRoleType() != RoleType.LOUP_GAROU)
choosable.add(entry.getKey());
if (choosable.size() > 0)
choosen = choosable.get(getGame().getRandom().nextInt(choosable.size()));
}
}
}
if (choosen != null) {
getGame().kill(choosen, Reason.LOUP_GAROU);
for (LGPlayer player : getPlayers())
player.sendMessage("§6Les §c§lLoups§6 ont décidé de tuer §7§l" + choosen.getName() + "§6.");
} else
for (LGPlayer player : getPlayers())
player.sendMessage("§6Personne n'a été désigné pour mourir.");
}
for(LGPlayer lgp : getGame().getInGame()) @EventHandler
teamDelete.sendPacket(lgp.getPlayer()); public void onGameJoin(LGGameEndEvent e) {
} if (e.getGame() == getGame()) {
} WrapperPlayServerScoreboardTeam teamDelete = new WrapperPlayServerScoreboardTeam();
teamDelete.setMode(1);
teamDelete.setName("loup_garou_list");
@EventHandler(priority = EventPriority.HIGHEST) for (LGPlayer lgp : getGame().getInGame())
public void onSkinChange(LGSkinLoadEvent e) { teamDelete.sendPacket(lgp.getPlayer());
if(e.getGame() == getGame()) }
if(getPlayers().contains(e.getPlayer()) && getPlayers().contains(e.getTo()) && showSkins) { }
e.getProfile().getProperties().removeAll("textures");
e.getProfile().getProperties().put("textures", LGCustomSkin.WEREWOLF.getProperty());
}
}
@EventHandler
public void onGameEnd(LGGameEndEvent e) {
if(e.getGame() == getGame() && e.getWinType() == LGWinType.LOUPGAROU)
for(LGPlayer lgp : getGame().getInGame())
if(lgp.getRoleWinType() == RoleWinType.LOUP_GAROU)//Changed to wintype
e.getWinners().add(lgp);
}
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.HIGHEST)
public void onUpdatePrefix (LGUpdatePrefixEvent e) { public void onSkinChange(LGSkinLoadEvent e) {
if(e.getGame() == getGame()) if (e.getGame() == getGame())
if(getPlayers().contains(e.getTo()) && getPlayers().contains(e.getPlayer())) if (getPlayers().contains(e.getPlayer()) && getPlayers().contains(e.getTo()) && showSkins) {
e.setPrefix(e.getPrefix()+"§c"); e.getProfile().getProperties().removeAll("textures");
} e.getProfile().getProperties().put("textures", LGCustomSkin.WEREWOLF.getProperty());
}
}
@EventHandler @EventHandler
public void onDay(LGNightEndEvent e) { public void onGameEnd(LGGameEndEvent e) {
if(e.getGame() == getGame()) { if (e.getGame() == getGame() && e.getWinType() == LGWinType.LOUPGAROU)
showSkins = false; for (LGPlayer lgp : getGame().getInGame())
for(LGPlayer player : getPlayers()) if (lgp.getRoleWinType() == RoleWinType.LOUP_GAROU)//Changed to wintype
player.updateOwnSkin(); e.getWinners().add(lgp);
} }
}
@EventHandler @EventHandler(priority = EventPriority.LOWEST)
public void onNight(LGDayEndEvent e) { public void onUpdatePrefix(LGUpdatePrefixEvent e) {
if(e.getGame() == getGame()) { if (e.getGame() == getGame())
showSkins = true; if (getPlayers().contains(e.getTo()) && getPlayers().contains(e.getPlayer()))
for(LGPlayer player : getPlayers()) e.setPrefix(e.getPrefix() + "§c");
player.updateOwnSkin(); }
}
} @EventHandler
public void onDay(LGNightEndEvent e) {
if (e.getGame() == getGame()) {
showSkins = false;
for (LGPlayer player : getPlayers())
player.updateOwnSkin();
}
}
@EventHandler
public void onNight(LGDayEndEvent e) {
if (e.getGame() == getGame()) {
showSkins = true;
for (LGPlayer player : getPlayers())
player.updateOwnSkin();
}
}
} }

View file

@ -1,7 +1,11 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import java.util.Collections; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.classes.LGWinType;
import fr.leomelki.loupgarou.events.LGEndCheckEvent;
import fr.leomelki.loupgarou.events.LGGameEndEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -10,154 +14,156 @@ import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import fr.leomelki.loupgarou.classes.LGGame; import java.util.Collections;
import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.classes.LGWinType;
import fr.leomelki.loupgarou.events.LGEndCheckEvent;
import fr.leomelki.loupgarou.events.LGGameEndEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
public class RLoupGarouBlanc extends Role{ public class RLoupGarouBlanc extends Role {
private static final ItemStack skip; private static final ItemStack skip;
static {
skip = new ItemStack(Material.IRON_NUGGET);
ItemMeta meta = skip.getItemMeta();
meta.setDisplayName("§7§lNe rien faire");
meta.setLore(Collections.singletonList("§8Passez votre tour"));
skip.setItemMeta(meta);
}
public RLoupGarouBlanc(LGGame game) { static {
super(game); skip = new ItemStack(Material.IRON_NUGGET);
} ItemMeta meta = skip.getItemMeta();
meta.setDisplayName("§7§lNe rien faire");
meta.setLore(Collections.singletonList("§8Passez votre tour"));
skip.setItemMeta(meta);
}
@Override Runnable callback;
public String getName() { RLoupGarou lg;
return "§c§lLoup Blanc";
}
@Override public RLoupGarouBlanc(LGGame game) {
public String getFriendlyName() { super(game);
return "du "+getName(); }
}
@Override @Override
public String getShortDescription() { public String getName() {
return "Tu gagnes §7§lSEUL"; return "§c§lLoup Blanc";
} }
@Override @Override
public String getDescription() { public String getFriendlyName() {
return "Tu gagnes §7§lSEUL§f. Les autres §c§lLoups§f croient que tu es un loup normal, mais une nuit sur deux, tu peux assassiner l'un d'eux au choix."; return "du " + getName();
} }
@Override @Override
public String getTask() { public String getShortDescription() {
return "Tu peux choisir un §c§lLoup-Garou§6 à éliminer, ou te rendormir."; return "Tu gagnes §7§lSEUL";
} }
@Override @Override
public String getBroadcastedTask() { public String getDescription() {
return "Le "+getName()+"§9 pourrait faire un ravage cette nuit..."; return "Tu gagnes §7§lSEUL§f. Les autres §c§lLoups§f croient que tu es un loup normal, mais une nuit sur deux, tu peux assassiner l'un d'eux au choix.";
} }
@Override
public RoleType getType() {
return RoleType.LOUP_GAROU;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.SEUL;
}
@Override @Override
public int getTimeout() { public String getTask() {
return 15; return "Tu peux choisir un §c§lLoup-Garou§6 à éliminer, ou te rendormir.";
} }
@Override @Override
public boolean hasPlayersLeft() { public String getBroadcastedTask() {
return super.hasPlayersLeft() && getGame().getNight()%2 == 0; return "Le " + getName() + "§9 pourrait faire un ravage cette nuit...";
} }
Runnable callback;
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
this.callback = callback;
RLoupGarou lg_ = null;
for(Role role : getGame().getRoles())
if(role instanceof RLoupGarou) {
lg_ = (RLoupGarou)role;
break;
}
RLoupGarou lg = lg_; @Override
player.showView(); public RoleType getType() {
player.getPlayer().getInventory().setItem(8, skip); return RoleType.LOUP_GAROU;
player.choose(choosen -> { }
if(choosen != null && choosen != player) {
if(!lg.getPlayers().contains(choosen)) {
player.sendMessage("§7§l"+choosen.getName()+"§4 n'est pas un Loup-Garou.");
return;
}
player.sendActionBarMessage("§e§l"+choosen.getName()+"§6 va mourir cette nuit");
player.sendMessage("§6Tu as choisi de dévorer §7§l"+choosen.getName()+"§6.");
player.getPlayer().getInventory().setItem(8, null);
player.getPlayer().updateInventory();
getGame().kill(choosen, Reason.LOUP_BLANC);
player.stopChoosing();
player.hideView();
callback.run();
}
});
}
@EventHandler
public void onClick(PlayerInteractEvent e) {
Player p = e.getPlayer();
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), p);
if(e.getItem() != null && e.getItem().getType() == Material.IRON_NUGGET && player.getRole() == this) {
player.stopChoosing();
p.getInventory().setItem(8, null);
p.updateInventory();
player.hideView();
player.sendMessage("§6Tu n'as tué personne.");
callback.run();
}
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.stopChoosing();
player.getPlayer().getInventory().setItem(8, null);
player.getPlayer().updateInventory();
player.hideView();
player.sendMessage("§6Tu n'as tué personne.");
}
RLoupGarou lg; @Override
@Override public RoleWinType getWinType() {
public void join(LGPlayer player, boolean sendMessage) { return RoleWinType.SEUL;
super.join(player, sendMessage); }
for(Role role : getGame().getRoles())
if(role instanceof RLoupGarou)
(lg = (RLoupGarou) role).join(player, false);
}
@EventHandler @Override
public void onEndgameCheck(LGEndCheckEvent e) { public int getTimeout() {
if(e.getGame() == getGame() && e.getWinType() == LGWinType.SOLO) { return 15;
if(getPlayers().size() > 0) { }
if(lg.getPlayers().size() > getPlayers().size())
e.setWinType(LGWinType.NONE);
else if(lg.getPlayers().size() == getPlayers().size())
e.setWinType(LGWinType.LOUPGAROUBLANC);
}
}
}
@EventHandler(priority = EventPriority.HIGHEST) @Override
public void onEndGame(LGGameEndEvent e) { public boolean hasPlayersLeft() {
if(e.getWinType() == LGWinType.LOUPGAROUBLANC) { return super.hasPlayersLeft() && getGame().getNight() % 2 == 0;
e.getWinners().clear(); }
e.getWinners().addAll(getPlayers());
} @Override
} protected void onNightTurn(LGPlayer player, Runnable callback) {
this.callback = callback;
RLoupGarou lg_ = null;
for (Role role : getGame().getRoles())
if (role instanceof RLoupGarou) {
lg_ = (RLoupGarou) role;
break;
}
RLoupGarou lg = lg_;
player.showView();
player.getPlayer().getInventory().setItem(8, skip);
player.choose(choosen -> {
if (choosen != null && choosen != player) {
if (!lg.getPlayers().contains(choosen)) {
player.sendMessage("§7§l" + choosen.getName() + "§4 n'est pas un Loup-Garou.");
return;
}
player.sendActionBarMessage("§e§l" + choosen.getName() + "§6 va mourir cette nuit");
player.sendMessage("§6Tu as choisi de dévorer §7§l" + choosen.getName() + "§6.");
player.getPlayer().getInventory().setItem(8, null);
player.getPlayer().updateInventory();
getGame().kill(choosen, Reason.LOUP_BLANC);
player.stopChoosing();
player.hideView();
callback.run();
}
});
}
@EventHandler
public void onClick(PlayerInteractEvent e) {
Player p = e.getPlayer();
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), p);
if (e.getItem() != null && e.getItem().getType() == Material.IRON_NUGGET && player.getRole() == this) {
player.stopChoosing();
p.getInventory().setItem(8, null);
p.updateInventory();
player.hideView();
player.sendMessage("§6Tu n'as tué personne.");
callback.run();
}
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.stopChoosing();
player.getPlayer().getInventory().setItem(8, null);
player.getPlayer().updateInventory();
player.hideView();
player.sendMessage("§6Tu n'as tué personne.");
}
@Override
public void join(LGPlayer player, boolean sendMessage) {
super.join(player, sendMessage);
for (Role role : getGame().getRoles())
if (role instanceof RLoupGarou)
(lg = (RLoupGarou) role).join(player, false);
}
@EventHandler
public void onEndgameCheck(LGEndCheckEvent e) {
if (e.getGame() == getGame() && e.getWinType() == LGWinType.SOLO) {
if (getPlayers().size() > 0) {
if (lg.getPlayers().size() > getPlayers().size())
e.setWinType(LGWinType.NONE);
else if (lg.getPlayers().size() == getPlayers().size())
e.setWinType(LGWinType.LOUPGAROUBLANC);
}
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onEndGame(LGGameEndEvent e) {
if (e.getWinType() == LGWinType.LOUPGAROUBLANC) {
e.getWinners().clear();
e.getWinners().addAll(getPlayers());
}
}
} }

View file

@ -1,8 +1,14 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import java.util.Arrays; import fr.leomelki.loupgarou.MainLg;
import java.util.Collections; import fr.leomelki.loupgarou.classes.LGCustomItems;
import fr.leomelki.loupgarou.classes.LGCustomItems.LGCustomItemsConstraints;
import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.classes.LGVote;
import fr.leomelki.loupgarou.events.LGCustomItemChangeEvent;
import fr.leomelki.loupgarou.events.LGNightEndEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryCustom; import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryCustom;
@ -16,213 +22,212 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import fr.leomelki.loupgarou.MainLg; import java.util.Arrays;
import fr.leomelki.loupgarou.classes.LGCustomItems; import java.util.Collections;
import fr.leomelki.loupgarou.classes.LGCustomItems.LGCustomItemsConstraints;
import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.classes.LGVote;
import fr.leomelki.loupgarou.events.LGCustomItemChangeEvent;
import fr.leomelki.loupgarou.events.LGNightEndEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
public class RLoupGarouNoir extends Role{ public class RLoupGarouNoir extends Role {
static final ItemStack[] items = new ItemStack[9]; static final ItemStack[] items = new ItemStack[9];
static final ItemStack[] skip = new ItemStack[9]; static final ItemStack[] skip = new ItemStack[9];
static {
items[3] = new ItemStack(Material.IRON_NUGGET);
ItemMeta meta = items[3].getItemMeta();
meta.setDisplayName("§7§lNe rien faire");
meta.setLore(Collections.singletonList("§8Passez votre tour"));
items[3].setItemMeta(meta);
items[5] = new ItemStack(Material.ROTTEN_FLESH);
meta = items[5].getItemMeta();
meta.setDisplayName("§c§lInfecter");
meta.setLore(Arrays.asList(
"§8Tu peux infecter la cible du vote.",
"§8Le joueur tiendra avec les Loups."));
items[5].setItemMeta(meta);
skip[4] = items[3];
}
public RLoupGarouNoir(LGGame game) { static {
super(game); items[3] = new ItemStack(Material.IRON_NUGGET);
} ItemMeta meta = items[3].getItemMeta();
meta.setDisplayName("§7§lNe rien faire");
meta.setLore(Collections.singletonList("§8Passez votre tour"));
items[3].setItemMeta(meta);
items[5] = new ItemStack(Material.ROTTEN_FLESH);
meta = items[5].getItemMeta();
meta.setDisplayName("§c§lInfecter");
meta.setLore(Arrays.asList(
"§8Tu peux infecter la cible du vote.",
"§8Le joueur tiendra avec les Loups."));
items[5].setItemMeta(meta);
skip[4] = items[3];
}
@Override LGVote vote;
public String getName() { Runnable callback;
return "§c§lLoup Noir"; LGPlayer toInfect;
} boolean inMenu = false;
@Override public RLoupGarouNoir(LGGame game) {
public String getFriendlyName() { super(game);
return "du "+getName(); }
}
@Override @Override
public String getShortDescription() { public String getName() {
return "Tu gagnes avec les §c§lLoups-Garous"; return "§c§lLoup Noir";
} }
@Override @Override
public String getDescription() { public String getFriendlyName() {
return "Tu gagnes avec les §c§lLoups-Garous§f. Chaque nuit, tu te réunis avec tes compères pour décider d'une victime à éliminer... Une fois dans la partie, tu peux transformer la personne désignée en §c§lLoup§f. L'infecté conserve ses pouvoirs mais gagne désormais avec les §c§lLoups§f."; return "du " + getName();
} }
@Override @Override
public String getTask() { public String getShortDescription() {
return "Veux-tu infecter la cible du vote ?"; return "Tu gagnes avec les §c§lLoups-Garous";
} }
@Override @Override
public String getBroadcastedTask() { public String getDescription() {
return "Le "+getName()+"§9 décide s'il veut infecter sa cible."; return "Tu gagnes avec les §c§lLoups-Garous§f. Chaque nuit, tu te réunis avec tes compères pour décider d'une victime à éliminer... Une fois dans la partie, tu peux transformer la personne désignée en §c§lLoup§f. L'infecté conserve ses pouvoirs mais gagne désormais avec les §c§lLoups§f.";
} }
@Override
public RoleType getType() {
return RoleType.LOUP_GAROU;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.LOUP_GAROU;
}
@Override @Override
public int getTimeout() { public String getTask() {
return 15; return "Veux-tu infecter la cible du vote ?";
} }
@Override @Override
public boolean hasPlayersLeft() { public String getBroadcastedTask() {
return super.hasPlayersLeft() && getGame().getDeaths().containsKey(Reason.LOUP_GAROU); return "Le " + getName() + "§9 décide s'il veut infecter sa cible.";
} }
LGVote vote; @Override
Runnable callback; public RoleType getType() {
LGPlayer toInfect; return RoleType.LOUP_GAROU;
}
public void openInventory(Player player) { @Override
inMenu = true; public RoleWinType getWinType() {
Inventory inventory = Bukkit.createInventory(null, 9, "§7Infecter "+toInfect.getName()+" ?"); return RoleWinType.LOUP_GAROU;
inventory.setContents(toInfect == null ? skip.clone() : items.clone()); }
player.closeInventory();
player.openInventory(inventory);
}
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
toInfect = getGame().getDeaths().get(Reason.LOUP_GAROU);
if(toInfect.getRoleType() == RoleType.LOUP_GAROU)
toInfect = null;
player.showView();
this.callback = callback;
openInventory(player.getPlayer());
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.getPlayer().getInventory().setItem(8, null);
player.stopChoosing();
closeInventory(player.getPlayer());
player.getPlayer().updateInventory();
player.hideView();
//player.sendTitle("§cVous n'infectez personne", "§4Vous avez mis trop de temps à vous décider...", 80);
player.sendMessage("§6Tu n'as rien fait cette nuit.");
}
boolean inMenu = false; @Override
public int getTimeout() {
return 15;
}
private void closeInventory(Player p) { @Override
inMenu = false; public boolean hasPlayersLeft() {
p.closeInventory(); return super.hasPlayersLeft() && getGame().getDeaths().containsKey(Reason.LOUP_GAROU);
} }
@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
ItemStack item = e.getCurrentItem();
Player player = (Player)e.getWhoClicked();
LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
if(lgp.getRole() != this || item == null || item.getItemMeta() == null)return; public void openInventory(Player player) {
inMenu = true;
Inventory inventory = Bukkit.createInventory(null, 9, "§7Infecter " + toInfect.getName() + " ?");
inventory.setContents(toInfect == null ? skip.clone() : items.clone());
player.closeInventory();
player.openInventory(inventory);
}
if(item.getItemMeta().getDisplayName().equals(items[3].getItemMeta().getDisplayName())) { @Override
e.setCancelled(true); protected void onNightTurn(LGPlayer player, Runnable callback) {
closeInventory(player); toInfect = getGame().getDeaths().get(Reason.LOUP_GAROU);
lgp.sendMessage("§6Tu n'as rien fait cette nuit."); if (toInfect.getRoleType() == RoleType.LOUP_GAROU)
lgp.hideView(); toInfect = null;
callback.run(); player.showView();
}else if(item.getItemMeta().getDisplayName().equals(items[5].getItemMeta().getDisplayName()) && toInfect != null) { this.callback = callback;
e.setCancelled(true); openInventory(player.getPlayer());
closeInventory(player); }
player.updateInventory();
closeInventory(player);
lgp.getCache().set("has_infected", true); @Override
toInfect.getCache().set("infected", true); protected void onNightTurnTimeout(LGPlayer player) {
getPlayers().remove(lgp); player.getPlayer().getInventory().setItem(8, null);
toInfect.getCache().set("just_infected", true); player.stopChoosing();
lgp.sendActionBarMessage("§9§lVous infectez §9"+toInfect.getName()); closeInventory(player.getPlayer());
lgp.sendMessage("§6Tu as infecté §7§l"+toInfect.getName()+"§6."); player.getPlayer().updateInventory();
lgp.stopChoosing(); player.hideView();
getGame().getDeaths().remove(Reason.LOUP_GAROU, toInfect); //player.sendTitle("§cVous n'infectez personne", "§4Vous avez mis trop de temps à vous décider...", 80);
lgp.hideView(); player.sendMessage("§6Tu n'as rien fait cette nuit.");
callback.run(); }
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onDayStart(LGNightEndEvent e) {
if(e.getGame() == getGame())
for(LGPlayer player : getGame().getAlive()) {
if(player.getCache().getBoolean("just_infected")) {
player.getCache().remove("just_infected");
player.sendMessage("§6Tu as été infecté pendant la nuit.");
player.sendMessage("§6§oTu gagnes désormais avec les §c§l§oLoups-Garous§6§o.");
for(Role role : getGame().getRoles())
if(role instanceof RLoupGarou)
if(!player.isDead()) {//Si il n'a pas été tué je ne sais comment
role.join(player, false);
player.getPlayer().getInventory().setItemInOffHand(new ItemStack(LGCustomItems.getItem(player)));
}
for(LGPlayer lgp : getGame().getInGame()) { private void closeInventory(Player p) {
if(lgp.getRoleType() == RoleType.LOUP_GAROU) inMenu = false;
lgp.sendMessage("§7§l"+player.getName()+"§6 s'est fait infecter pendant la nuit."); p.closeInventory();
else }
lgp.sendMessage("§6Un joueur a été §c§linfecté§6 pendant la nuit.");
}
if(getGame().checkEndGame()) @EventHandler
e.setCancelled(true); public void onInventoryClick(InventoryClickEvent e) {
} ItemStack item = e.getCurrentItem();
} Player player = (Player) e.getWhoClicked();
} LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
@Override if (lgp.getRole() != this || item == null || item.getItemMeta() == null) return;
public void join(LGPlayer player, boolean sendMessage) {
super.join(player, sendMessage);
for(Role role : getGame().getRoles())
if(role instanceof RLoupGarou)
role.join(player, false);
}
@EventHandler if (item.getItemMeta().getDisplayName().equals(items[3].getItemMeta().getDisplayName())) {
public void onQuitInventory(InventoryCloseEvent e) { e.setCancelled(true);
if(e.getInventory() instanceof CraftInventoryCustom) { closeInventory(player);
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), (Player)e.getPlayer()); lgp.sendMessage("§6Tu n'as rien fait cette nuit.");
if(player.getRole() == this && inMenu) { lgp.hideView();
new BukkitRunnable() { callback.run();
} else if (item.getItemMeta().getDisplayName().equals(items[5].getItemMeta().getDisplayName()) && toInfect != null) {
e.setCancelled(true);
closeInventory(player);
player.updateInventory();
closeInventory(player);
@Override lgp.getCache().set("has_infected", true);
public void run() { toInfect.getCache().set("infected", true);
e.getPlayer().openInventory(e.getInventory()); getPlayers().remove(lgp);
} toInfect.getCache().set("just_infected", true);
}.runTaskLater(MainLg.getInstance(), 1); lgp.sendActionBarMessage("§9§lVous infectez §9" + toInfect.getName());
} lgp.sendMessage("§6Tu as infecté §7§l" + toInfect.getName() + "§6.");
} lgp.stopChoosing();
} getGame().getDeaths().remove(Reason.LOUP_GAROU, toInfect);
lgp.hideView();
callback.run();
}
}
@EventHandler @EventHandler(priority = EventPriority.HIGHEST)
public void onCustomItemChange(LGCustomItemChangeEvent e) { public void onDayStart(LGNightEndEvent e) {
if(e.getGame() == getGame()) if (e.getGame() == getGame())
if(e.getPlayer().getCache().getBoolean("infected")) for (LGPlayer player : getGame().getAlive()) {
e.getConstraints().add(LGCustomItemsConstraints.INFECTED.getName()); if (player.getCache().getBoolean("just_infected")) {
} player.getCache().remove("just_infected");
player.sendMessage("§6Tu as été infecté pendant la nuit.");
player.sendMessage("§6§oTu gagnes désormais avec les §c§l§oLoups-Garous§6§o.");
for (Role role : getGame().getRoles())
if (role instanceof RLoupGarou)
if (!player.isDead()) {//Si il n'a pas été tué je ne sais comment
role.join(player, false);
player.getPlayer().getInventory().setItemInOffHand(new ItemStack(LGCustomItems.getItem(player)));
}
for (LGPlayer lgp : getGame().getInGame()) {
if (lgp.getRoleType() == RoleType.LOUP_GAROU)
lgp.sendMessage("§7§l" + player.getName() + "§6 s'est fait infecter pendant la nuit.");
else
lgp.sendMessage("§6Un joueur a été §c§linfecté§6 pendant la nuit.");
}
if (getGame().checkEndGame())
e.setCancelled(true);
}
}
}
@Override
public void join(LGPlayer player, boolean sendMessage) {
super.join(player, sendMessage);
for (Role role : getGame().getRoles())
if (role instanceof RLoupGarou)
role.join(player, false);
}
@EventHandler
public void onQuitInventory(InventoryCloseEvent e) {
if (e.getInventory() instanceof CraftInventoryCustom) {
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), (Player) e.getPlayer());
if (player.getRole() == this && inMenu) {
new BukkitRunnable() {
@Override
public void run() {
e.getPlayer().openInventory(e.getInventory());
}
}.runTaskLater(MainLg.getInstance(), 1);
}
}
}
@EventHandler
public void onCustomItemChange(LGCustomItemChangeEvent e) {
if (e.getGame() == getGame())
if (e.getPlayer().getCache().getBoolean("infected"))
e.getConstraints().add(LGCustomItemsConstraints.INFECTED.getName());
}
} }

View file

@ -1,96 +1,105 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import org.bukkit.event.EventHandler;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.classes.chat.LGChat; import fr.leomelki.loupgarou.classes.chat.LGChat;
import fr.leomelki.loupgarou.events.LGDayEndEvent; import fr.leomelki.loupgarou.events.LGDayEndEvent;
import fr.leomelki.loupgarou.events.LGPreDayStartEvent; import fr.leomelki.loupgarou.events.LGPreDayStartEvent;
import fr.leomelki.loupgarou.events.LGRoleTurnEndEvent; import fr.leomelki.loupgarou.events.LGRoleTurnEndEvent;
import org.bukkit.event.EventHandler;
public class RMedium extends Role{ public class RMedium extends Role {
public RMedium(LGGame game) { public RMedium(LGGame game) {
super(game); super(game);
} }
@Override
public RoleType getType() {
return RoleType.VILLAGER;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@Override
public String getName() {
return "§a§lMédium";
}
@Override
public String getFriendlyName() {
return "du "+getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. Chaque nuit, tu peux communiquer avec les morts pour tenter de récupérer des informations cruciales.";
}
@Override
public String getTask() {
return "";
}
@Override
public String getBroadcastedTask() {
return "";
}
@Override
public int getTimeout() {
return -1;
}
@EventHandler @Override
public void onNight(LGDayEndEvent e) { public RoleType getType() {
if(e.getGame() == getGame()) return RoleType.VILLAGER;
for(LGPlayer lgp : getPlayers()) { }
lgp.sendMessage("§8§oTu entres en contact avec le monde des morts...");
joinChat(lgp); @Override
} public RoleWinType getWinType() {
} return RoleWinType.VILLAGE;
}
@Override
public String getName() {
return "§a§lMédium";
}
@Override
public String getFriendlyName() {
return "du " + getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. Chaque nuit, tu peux communiquer avec les morts pour tenter de récupérer des informations cruciales.";
}
@Override
public String getTask() {
return "";
}
@Override
public String getBroadcastedTask() {
return "";
}
@Override
public int getTimeout() {
return -1;
}
@EventHandler
public void onNight(LGDayEndEvent e) {
if (e.getGame() == getGame())
for (LGPlayer lgp : getPlayers()) {
lgp.sendMessage("§8§oTu entres en contact avec le monde des morts...");
joinChat(lgp);
}
}
private void joinChat(LGPlayer lgp) { private void joinChat(LGPlayer lgp) {
lgp.joinChat(getGame().getSpectatorChat(), new LGChat.LGChatCallback() { lgp.joinChat(getGame().getSpectatorChat(), new LGChat.LGChatCallback() {
@Override @Override
public String receive(LGPlayer sender, String message) { public String receive(LGPlayer sender, String message) {
return "§7"+sender.getName()+"§6 » §f"+message; return "§7" + sender.getName() + "§6 » §f" + message;
} }
@Override @Override
public String send(LGPlayer sender, String message) { public String send(LGPlayer sender, String message) {
return getName()+"§6 » §f"+message; return getName() + "§6 » §f" + message;
} }
}); });
} }
@EventHandler
public void onRoleTurn(LGRoleTurnEndEvent e) {
if(e.getGame() == getGame())
if(e.getPreviousRole() instanceof RLoupGarou)
for(LGPlayer lgp : getPlayers())
if(lgp.getChat() != getGame().getSpectatorChat() && lgp.isRoleActive()) {
lgp.sendMessage("§6§oTu peux de nouveau parler aux morts...");
joinChat(lgp);
}
}
@EventHandler @EventHandler
public void onDay(LGPreDayStartEvent e) { public void onRoleTurn(LGRoleTurnEndEvent e) {
if(e.getGame() == getGame()) if (e.getGame() == getGame())
for(LGPlayer lgp : getPlayers()) if (e.getPreviousRole() instanceof RLoupGarou)
if(lgp.isRoleActive()) for (LGPlayer lgp : getPlayers())
lgp.leaveChat(); if (lgp.getChat() != getGame().getSpectatorChat() && lgp.isRoleActive()) {
} lgp.sendMessage("§6§oTu peux de nouveau parler aux morts...");
joinChat(lgp);
}
}
@EventHandler
public void onDay(LGPreDayStartEvent e) {
if (e.getGame() == getGame())
for (LGPlayer lgp : getPlayers())
if (lgp.isRoleActive())
lgp.leaveChat();
}
} }

View file

@ -1,104 +1,112 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import java.util.List;
import java.util.Random;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import fr.leomelki.loupgarou.MainLg; import fr.leomelki.loupgarou.MainLg;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGDayStartEvent; import fr.leomelki.loupgarou.events.LGDayStartEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
public class RMontreurDOurs extends Role{ import java.util.List;
public RMontreurDOurs(LGGame game) { import java.util.Random;
super(game);
}
@Override
public RoleType getType() {
return RoleType.VILLAGER;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@Override
public String getName() {
return "§a§lMontreur d'Ours";
}
@Override
public String getFriendlyName() {
return "du "+getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. Chaque matin, ton Ours va renifler tes voisins et grognera si l'un d'eux est hostile aux Villageois.";
}
@Override
public String getTask() {
return "";
}
@Override
public String getBroadcastedTask() {
return "";
}
@Override
public int getTimeout() {
return -1;
}
private static final Random random = new Random(); public class RMontreurDOurs extends Role {
private int lastNight = -1; private static final Random random = new Random();
private int lastNight = -1;
@EventHandler(priority = EventPriority.LOWEST) public RMontreurDOurs(LGGame game) {
public void onDay(LGDayStartEvent e) { super(game);
if (e.getGame() == getGame() && getPlayers().size() > 0) { }
if(lastNight == getGame().getNight())
return;
lastNight = getGame().getNight();
List<?> original = MainLg.getInstance().getConfig().getList("spawns");
for(LGPlayer target : getPlayers()) {
if(!target.isRoleActive())
continue;
int size = original.size();
int killedPlace = target.getPlace();
for (int i = killedPlace + 1;; i++) { @Override
if (i == size) public RoleType getType() {
i = 0; return RoleType.VILLAGER;
LGPlayer lgp = getGame().getPlacements().get(i); }
if (lgp != null && !lgp.isDead()) {
if(lgp.getRoleWinType() == RoleWinType.VILLAGE || lgp.getRoleWinType() == RoleWinType.NONE) @Override
break; public RoleWinType getWinType() {
else{ return RoleWinType.VILLAGE;
getGame().broadcastMessage("§6La bête du "+getName()+"§6 grogne..."); }
return;
} @Override
} public String getName() {
if (lgp == target)// Fait un tour complet return "§a§lMontreur d'Ours";
break; }
}
for (int i = killedPlace - 1;; i--) { @Override
if (i == -1) public String getFriendlyName() {
i = size - 1; return "du " + getName();
LGPlayer lgp = getGame().getPlacements().get(i); }
if (lgp != null && !lgp.isDead()) {
if(lgp.getRoleWinType() == RoleWinType.VILLAGE || lgp.getRoleWinType() == RoleWinType.NONE) @Override
break; public String getShortDescription() {
else{ return "Tu gagnes avec le §a§lVillage";
getGame().broadcastMessage("§6La bête du "+getName()+"§6 grogne..."); }
return;
} @Override
} public String getDescription() {
if (lgp == target)// Fait un tour complet return "Tu gagnes avec le §a§lVillage§f. Chaque matin, ton Ours va renifler tes voisins et grognera si l'un d'eux est hostile aux Villageois.";
break; }
}
} @Override
} public String getTask() {
} return "";
}
@Override
public String getBroadcastedTask() {
return "";
}
@Override
public int getTimeout() {
return -1;
}
@EventHandler(priority = EventPriority.LOWEST)
public void onDay(LGDayStartEvent e) {
if (e.getGame() == getGame() && getPlayers().size() > 0) {
if (lastNight == getGame().getNight())
return;
lastNight = getGame().getNight();
List<?> original = MainLg.getInstance().getConfig().getList("spawns");
for (LGPlayer target : getPlayers()) {
if (!target.isRoleActive())
continue;
int size = original.size();
int killedPlace = target.getPlace();
for (int i = killedPlace + 1; ; i++) {
if (i == size)
i = 0;
LGPlayer lgp = getGame().getPlacements().get(i);
if (lgp != null && !lgp.isDead()) {
if (lgp.getRoleWinType() == RoleWinType.VILLAGE || lgp.getRoleWinType() == RoleWinType.NONE)
break;
else {
getGame().broadcastMessage("§6La bête du " + getName() + "§6 grogne...");
return;
}
}
if (lgp == target)// Fait un tour complet
break;
}
for (int i = killedPlace - 1; ; i--) {
if (i == -1)
i = size - 1;
LGPlayer lgp = getGame().getPlacements().get(i);
if (lgp != null && !lgp.isDead()) {
if (lgp.getRoleWinType() == RoleWinType.VILLAGE || lgp.getRoleWinType() == RoleWinType.NONE)
break;
else {
getGame().broadcastMessage("§6La bête du " + getName() + "§6 grogne...");
return;
}
}
if (lgp == target)// Fait un tour complet
break;
}
}
}
}
} }

View file

@ -1,73 +1,81 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import java.util.Arrays;
import java.util.List;
import org.bukkit.event.EventHandler;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGRoleTurnEndEvent; import fr.leomelki.loupgarou.events.LGRoleTurnEndEvent;
import org.bukkit.event.EventHandler;
public class RPetiteFille extends Role{ import java.util.Arrays;
public RPetiteFille(LGGame game) { import java.util.List;
super(game);
}
@Override
public RoleType getType() {
return RoleType.VILLAGER;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@Override
public String getName() {
return "§a§lPetite Fille";
}
@Override
public String getFriendlyName() {
return "de la "+getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. Chaque nuit, tu peux espionner les §c§lLoups§f.";
}
@Override
public String getTask() {
return "";
}
@Override
public String getBroadcastedTask() {
return "";
}
@Override
public int getTimeout() {
return -1;
}
final List<String> customNames = Arrays.asList("Loup Glouton", "Loup Méchant", "Loup Burlesque", "Loup Peureux", "Loup Malingre", "Loup Gentil", "Loup Tueur", "Loup Énervé", "Loup Docteur"); public class RPetiteFille extends Role {
final List<String> customNames = Arrays.asList("Loup Glouton", "Loup Méchant", "Loup Burlesque", "Loup Peureux", "Loup Malingre", "Loup Gentil", "Loup Tueur", "Loup Énervé", "Loup Docteur");
@EventHandler public RPetiteFille(LGGame game) {
public void onChangeRole(LGRoleTurnEndEvent e) { super(game);
if(e.getGame() == getGame()) { }
if(e.getNewRole() instanceof RLoupGarou)
for(Role role : getGame().getRoles()) @Override
if(role instanceof RLoupGarou) { public RoleType getType() {
RLoupGarou lgRole = (RLoupGarou)role; return RoleType.VILLAGER;
for(LGPlayer player : getPlayers()) }
if(!player.getCache().getBoolean("infected") && player.isRoleActive())
player.joinChat(lgRole.getChat(), (sender, message)-> "§c"+customNames.get(lgRole.getPlayers().indexOf(sender))+" §6» §f"+message, true); @Override
break; public RoleWinType getWinType() {
} return RoleWinType.VILLAGE;
if(e.getPreviousRole() instanceof RLoupGarou) }
for(LGPlayer player : getPlayers())
if(!player.getCache().getBoolean("infected") && player.isRoleActive()) @Override
player.leaveChat(); public String getName() {
} return "§a§lPetite Fille";
} }
@Override
public String getFriendlyName() {
return "de la " + getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. Chaque nuit, tu peux espionner les §c§lLoups§f.";
}
@Override
public String getTask() {
return "";
}
@Override
public String getBroadcastedTask() {
return "";
}
@Override
public int getTimeout() {
return -1;
}
@EventHandler
public void onChangeRole(LGRoleTurnEndEvent e) {
if (e.getGame() == getGame()) {
if (e.getNewRole() instanceof RLoupGarou)
for (Role role : getGame().getRoles())
if (role instanceof RLoupGarou) {
RLoupGarou lgRole = (RLoupGarou) role;
for (LGPlayer player : getPlayers())
if (!player.getCache().getBoolean("infected") && player.isRoleActive())
player.joinChat(lgRole.getChat(), (sender, message) -> "§c" + customNames.get(lgRole.getPlayers().indexOf(sender)) + " §6» §f" + message, true);
break;
}
if (e.getPreviousRole() instanceof RLoupGarou)
for (LGPlayer player : getPlayers())
if (!player.getCache().getBoolean("infected") && player.isRoleActive())
player.leaveChat();
}
}
} }

View file

@ -1,8 +1,11 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import java.util.Arrays; import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerHeldItemSlot;
import java.util.Collections; import fr.leomelki.loupgarou.MainLg;
import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryCustom; import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryCustom;
@ -17,193 +20,196 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerHeldItemSlot; import java.util.Arrays;
import fr.leomelki.loupgarou.MainLg; import java.util.Collections;
import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
public class RPirate extends Role{ public class RPirate extends Role {
static final ItemStack[] items = new ItemStack[9]; static final ItemStack[] items = new ItemStack[9];
static {
items[3] = new ItemStack(Material.IRON_NUGGET);
ItemMeta meta = items[3].getItemMeta();
meta.setDisplayName("§7§lNe rien faire");
meta.setLore(Collections.singletonList("§8Passez votre tour"));
items[3].setItemMeta(meta);
items[5] = new ItemStack(Material.ROTTEN_FLESH);
meta = items[5].getItemMeta();
meta.setDisplayName("§6§lPrendre un otage");
meta.setLore(Arrays.asList(
"§8Tu peux prendre un joueur en otage",
"§8Si tu meurs du vote, il mourra à ta place."));
items[5].setItemMeta(meta);
}
public RPirate(LGGame game) { static {
super(game); items[3] = new ItemStack(Material.IRON_NUGGET);
} ItemMeta meta = items[3].getItemMeta();
meta.setDisplayName("§7§lNe rien faire");
meta.setLore(Collections.singletonList("§8Passez votre tour"));
items[3].setItemMeta(meta);
items[5] = new ItemStack(Material.ROTTEN_FLESH);
meta = items[5].getItemMeta();
meta.setDisplayName("§6§lPrendre un otage");
meta.setLore(Arrays.asList(
"§8Tu peux prendre un joueur en otage",
"§8Si tu meurs du vote, il mourra à ta place."));
items[5].setItemMeta(meta);
}
@Override Runnable callback;
public String getName() { boolean inMenu = false;
return "§a§lPirate";
}
@Override public RPirate(LGGame game) {
public String getFriendlyName() { super(game);
return "du "+getName(); }
}
@Override @Override
public String getShortDescription() { public String getName() {
return "Tu gagnes avec le §a§lVillage"; return "§a§lPirate";
} }
@Override @Override
public String getDescription() { public String getFriendlyName() {
return "Tu gagnes avec le §a§lVillage§f. Une fois dans la partie, tu peux prendre en otage un autre joueur. Si tu es désigné à l'issue du vote de jour, ton §lotage§f mourra à ta place et ton rôle sera dévoilé au reste du village"; return "du " + getName();
} }
@Override @Override
public String getTask() { public String getShortDescription() {
return "Veux-tu prendre quelqu'un en otage ?"; return "Tu gagnes avec le §a§lVillage";
} }
@Override @Override
public String getBroadcastedTask() { public String getDescription() {
return "Le "+getName()+"§9 aiguise son crochet..."; return "Tu gagnes avec le §a§lVillage§f. Une fois dans la partie, tu peux prendre en otage un autre joueur. Si tu es désigné à l'issue du vote de jour, ton §lotage§f mourra à ta place et ton rôle sera dévoilé au reste du village";
} }
@Override
public RoleType getType() {
return RoleType.VILLAGER;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@Override @Override
public int getTimeout() { public String getTask() {
return 15; return "Veux-tu prendre quelqu'un en otage ?";
} }
Runnable callback; @Override
public String getBroadcastedTask() {
return "Le " + getName() + "§9 aiguise son crochet...";
}
public void openInventory(Player player) { @Override
inMenu = true; public RoleType getType() {
Inventory inventory = Bukkit.createInventory(null, 9, "§7Veux-tu prendre un otage ?"); return RoleType.VILLAGER;
inventory.setContents(items.clone()); }
player.closeInventory();
player.openInventory(inventory);
}
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
player.showView();
this.callback = callback;
openInventory(player.getPlayer());
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.getPlayer().getInventory().setItem(8, null);
player.stopChoosing();
closeInventory(player.getPlayer());
player.getPlayer().updateInventory();
player.hideView();
//player.sendTitle("§cVous n'infectez personne", "§4Vous avez mis trop de temps à vous décider...", 80);
player.sendMessage("§6Tu n'as rien fait cette nuit.");
}
boolean inMenu = false; @Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
private void closeInventory(Player p) { @Override
inMenu = false; public int getTimeout() {
p.closeInventory(); return 15;
} }
@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
ItemStack item = e.getCurrentItem();
Player player = (Player)e.getWhoClicked();
LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
if(lgp.getRole() != this || item == null || item.getItemMeta() == null)return; public void openInventory(Player player) {
inMenu = true;
Inventory inventory = Bukkit.createInventory(null, 9, "§7Veux-tu prendre un otage ?");
inventory.setContents(items.clone());
player.closeInventory();
player.openInventory(inventory);
}
if(item.getItemMeta().getDisplayName().equals(items[3].getItemMeta().getDisplayName())) { @Override
e.setCancelled(true); protected void onNightTurn(LGPlayer player, Runnable callback) {
closeInventory(player); player.showView();
lgp.sendMessage("§6Tu n'as rien fait cette nuit."); this.callback = callback;
lgp.hideView(); openInventory(player.getPlayer());
callback.run(); }
}else if(item.getItemMeta().getDisplayName().equals(items[5].getItemMeta().getDisplayName())) {
e.setCancelled(true);
closeInventory(player);
player.getInventory().setItem(8, items[3]);
player.updateInventory();
//Pour éviter les missclick
WrapperPlayServerHeldItemSlot held = new WrapperPlayServerHeldItemSlot();
held.setSlot(0);
held.sendPacket(player);
lgp.sendMessage("§6Choisissez votre otage.");
lgp.choose(choosen -> {
if(choosen != null) {
player.getInventory().setItem(8, null);
player.updateInventory();
lgp.stopChoosing();
lgp.sendMessage("§6Tu as pris §7§l"+choosen.getName()+"§6 en otage.");
lgp.sendActionBarMessage("§7§l"+choosen.getName()+"§6 est ton otage");
lgp.getCache().set("pirate_otage", choosen);
choosen.getCache().set("pirate_otage_d", lgp);
getPlayers().remove(lgp);//Pour éviter qu'il puisse prendre plusieurs otages
choosen.sendMessage("§7§l"+lgp.getName()+"§6 t'a pris en otage, il est "+getName()+"§6.");
lgp.hideView();
callback.run();
}
}, lgp);
}
}
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerKilled(LGPlayerKilledEvent e) {
if(e.getGame() == getGame() && e.getReason() == Reason.VOTE)
if(e.getKilled().getCache().has("pirate_otage") && e.getKilled().isRoleActive()) {
LGPlayer otage = e.getKilled().getCache().remove("pirate_otage");
if(!otage.isDead() && otage.getCache().get("pirate_otage_d") == e.getKilled()) {
getGame().broadcastMessage("§7§l"+e.getKilled().getName()+"§6 est "+getName()+"§6, c'est son otage qui va mourir.");
e.setKilled(otage);
e.setReason(Reason.PIRATE);
}
}
}
@EventHandler @Override
public void onClick(PlayerInteractEvent e) { protected void onNightTurnTimeout(LGPlayer player) {
Player player = e.getPlayer(); player.getPlayer().getInventory().setItem(8, null);
LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player); player.stopChoosing();
if(lgp.getRole() == this) { closeInventory(player.getPlayer());
if(e.getItem() != null && e.getItem().hasItemMeta() && e.getItem().getItemMeta().getDisplayName().equals(items[3].getItemMeta().getDisplayName())) { player.getPlayer().updateInventory();
e.setCancelled(true); player.hideView();
player.getInventory().setItem(8, null); //player.sendTitle("§cVous n'infectez personne", "§4Vous avez mis trop de temps à vous décider...", 80);
player.updateInventory(); player.sendMessage("§6Tu n'as rien fait cette nuit.");
lgp.stopChoosing(); }
lgp.sendMessage("§6Tu n'as rien fait cette nuit.");
lgp.hideView();
callback.run();
}
}
}
@EventHandler
public void onQuitInventory(InventoryCloseEvent e) {
if(e.getInventory() instanceof CraftInventoryCustom) {
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), (Player)e.getPlayer());
if(player.getRole() == this && inMenu) {
new BukkitRunnable() {
@Override private void closeInventory(Player p) {
public void run() { inMenu = false;
e.getPlayer().openInventory(e.getInventory()); p.closeInventory();
} }
}.runTaskLater(MainLg.getInstance(), 1);
} @EventHandler
} public void onInventoryClick(InventoryClickEvent e) {
} ItemStack item = e.getCurrentItem();
Player player = (Player) e.getWhoClicked();
LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
if (lgp.getRole() != this || item == null || item.getItemMeta() == null) return;
if (item.getItemMeta().getDisplayName().equals(items[3].getItemMeta().getDisplayName())) {
e.setCancelled(true);
closeInventory(player);
lgp.sendMessage("§6Tu n'as rien fait cette nuit.");
lgp.hideView();
callback.run();
} else if (item.getItemMeta().getDisplayName().equals(items[5].getItemMeta().getDisplayName())) {
e.setCancelled(true);
closeInventory(player);
player.getInventory().setItem(8, items[3]);
player.updateInventory();
//Pour éviter les missclick
WrapperPlayServerHeldItemSlot held = new WrapperPlayServerHeldItemSlot();
held.setSlot(0);
held.sendPacket(player);
lgp.sendMessage("§6Choisissez votre otage.");
lgp.choose(choosen -> {
if (choosen != null) {
player.getInventory().setItem(8, null);
player.updateInventory();
lgp.stopChoosing();
lgp.sendMessage("§6Tu as pris §7§l" + choosen.getName() + "§6 en otage.");
lgp.sendActionBarMessage("§7§l" + choosen.getName() + "§6 est ton otage");
lgp.getCache().set("pirate_otage", choosen);
choosen.getCache().set("pirate_otage_d", lgp);
getPlayers().remove(lgp);//Pour éviter qu'il puisse prendre plusieurs otages
choosen.sendMessage("§7§l" + lgp.getName() + "§6 t'a pris en otage, il est " + getName() + "§6.");
lgp.hideView();
callback.run();
}
}, lgp);
}
}
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerKilled(LGPlayerKilledEvent e) {
if (e.getGame() == getGame() && e.getReason() == Reason.VOTE)
if (e.getKilled().getCache().has("pirate_otage") && e.getKilled().isRoleActive()) {
LGPlayer otage = e.getKilled().getCache().remove("pirate_otage");
if (!otage.isDead() && otage.getCache().get("pirate_otage_d") == e.getKilled()) {
getGame().broadcastMessage("§7§l" + e.getKilled().getName() + "§6 est " + getName() + "§6, c'est son otage qui va mourir.");
e.setKilled(otage);
e.setReason(Reason.PIRATE);
}
}
}
@EventHandler
public void onClick(PlayerInteractEvent e) {
Player player = e.getPlayer();
LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
if (lgp.getRole() == this) {
if (e.getItem() != null && e.getItem().hasItemMeta() && e.getItem().getItemMeta().getDisplayName().equals(items[3].getItemMeta().getDisplayName())) {
e.setCancelled(true);
player.getInventory().setItem(8, null);
player.updateInventory();
lgp.stopChoosing();
lgp.sendMessage("§6Tu n'as rien fait cette nuit.");
lgp.hideView();
callback.run();
}
}
}
@EventHandler
public void onQuitInventory(InventoryCloseEvent e) {
if (e.getInventory() instanceof CraftInventoryCustom) {
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), (Player) e.getPlayer());
if (player.getRole() == this && inMenu) {
new BukkitRunnable() {
@Override
public void run() {
e.getPlayer().openInventory(e.getInventory());
}
}.runTaskLater(MainLg.getInstance(), 1);
}
}
}
} }

View file

@ -1,9 +1,16 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import java.util.ArrayList; import com.comphenix.protocol.wrappers.WrappedDataWatcher;
import java.util.Arrays; import com.comphenix.protocol.wrappers.WrappedDataWatcher.WrappedDataWatcherObject;
import java.util.Collections; import com.comphenix.protocol.wrappers.WrappedWatchableObject;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerEntityMetadata;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerHeldItemSlot;
import fr.leomelki.loupgarou.MainLg;
import fr.leomelki.loupgarou.classes.LGCustomItems;
import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGPreDayStartEvent;
import fr.leomelki.loupgarou.utils.VariousUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryCustom; import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryCustom;
@ -19,268 +26,267 @@ import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import com.comphenix.protocol.wrappers.WrappedDataWatcher; import java.util.ArrayList;
import com.comphenix.protocol.wrappers.WrappedDataWatcher.WrappedDataWatcherObject; import java.util.Arrays;
import com.comphenix.protocol.wrappers.WrappedWatchableObject; import java.util.Collections;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerEntityMetadata; public class RPretre extends Role {
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerHeldItemSlot; static final ItemStack[] items = new ItemStack[9];
import fr.leomelki.loupgarou.MainLg;
import fr.leomelki.loupgarou.classes.LGCustomItems;
import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGPreDayStartEvent;
import fr.leomelki.loupgarou.utils.VariousUtils;
public class RPretre extends Role{ static {
static final ItemStack[] items = new ItemStack[9]; items[3] = new ItemStack(Material.IRON_NUGGET);
static { ItemMeta meta = items[3].getItemMeta();
items[3] = new ItemStack(Material.IRON_NUGGET); meta.setDisplayName("§7§lNe rien faire");
ItemMeta meta = items[3].getItemMeta(); meta.setLore(Collections.singletonList("§8Passez votre tour"));
meta.setDisplayName("§7§lNe rien faire"); items[3].setItemMeta(meta);
meta.setLore(Collections.singletonList("§8Passez votre tour")); items[5] = new ItemStack(Material.ROTTEN_FLESH);
items[3].setItemMeta(meta); meta = items[5].getItemMeta();
items[5] = new ItemStack(Material.ROTTEN_FLESH); meta.setDisplayName("§2§lRessuciter");
meta = items[5].getItemMeta(); meta.setLore(Arrays.asList(
meta.setDisplayName("§2§lRessuciter"); "§8Tu peux ressusciter un §a§lVillageois",
meta.setLore(Arrays.asList( "§8mort précédemment pendant la partie."));
"§8Tu peux ressusciter un §a§lVillageois", items[5].setItemMeta(meta);
"§8mort précédemment pendant la partie.")); }
items[5].setItemMeta(meta);
}
public RPretre(LGGame game) { final WrappedDataWatcherObject invisible = new WrappedDataWatcherObject(0, WrappedDataWatcher.Registry.get(Byte.class));
super(game); final ArrayList<LGPlayer> ressucited = new ArrayList<>();
} Runnable callback;
boolean inMenu = false;
@Override public RPretre(LGGame game) {
public String getName() { super(game);
return "§a§lPrêtre"; }
}
@Override @Override
public String getFriendlyName() { public String getName() {
return "du "+getName(); return "§a§lPrêtre";
} }
@Override @Override
public String getShortDescription() { public String getFriendlyName() {
return "Tu gagnes avec le §a§lVillage"; return "du " + getName();
} }
@Override @Override
public String getDescription() { public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage§f. Une fois dans la partie, tu peux ressusciter parmi les morts un membre du §a§lVillage§f, qui reviendra à la vie sans ses pouvoirs."; return "Tu gagnes avec le §a§lVillage";
} }
@Override @Override
public String getTask() { public String getDescription() {
return "Veux-tu ressusciter un allié défunt ?"; return "Tu gagnes avec le §a§lVillage§f. Une fois dans la partie, tu peux ressusciter parmi les morts un membre du §a§lVillage§f, qui reviendra à la vie sans ses pouvoirs.";
} }
@Override @Override
public String getBroadcastedTask() { public String getTask() {
return "Le "+getName()+"§9 récite ses ouvrages..."; return "Veux-tu ressusciter un allié défunt ?";
} }
@Override
public RoleType getType() {
return RoleType.VILLAGER;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@Override @Override
public int getTimeout() { public String getBroadcastedTask() {
return 30; return "Le " + getName() + "§9 récite ses ouvrages...";
} }
@Override
public boolean hasPlayersLeft() {
for(LGPlayer pretre : getPlayers())
for(LGPlayer lgp : getGame().getInGame())
if(lgp.isDead() && (lgp.getRoleType() == RoleType.VILLAGER || lgp.getRoleType() == pretre.getRoleType()))
return super.hasPlayersLeft();
return false;
}
Runnable callback; @Override
public RoleType getType() {
return RoleType.VILLAGER;
}
public void openInventory(Player player) { @Override
inMenu = true; public RoleWinType getWinType() {
Inventory inventory = Bukkit.createInventory(null, 9, "§7Veux-tu réssusciter quelqu'un ?"); return RoleWinType.VILLAGE;
inventory.setContents(items.clone()); }
player.closeInventory();
player.openInventory(inventory);
}
final WrappedDataWatcherObject invisible = new WrappedDataWatcherObject(0, WrappedDataWatcher.Registry.get(Byte.class));
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
player.showView();
for(LGPlayer lgp : getGame().getInGame())
if(lgp.isDead() && (lgp.getRoleType() == RoleType.VILLAGER || lgp.getRoleType() == player.getRoleType())){
if(lgp.getPlayer() != null) {
player.getPlayer().showPlayer(getGame().getPlugin(), lgp.getPlayer());
WrapperPlayServerEntityMetadata meta = new WrapperPlayServerEntityMetadata();
meta.setEntityID(lgp.getPlayer().getEntityId());
meta.setMetadata(Collections.singletonList(new WrappedWatchableObject(invisible, (byte) 0)));
meta.sendPacket(player.getPlayer());
}
}else
player.getPlayer().hidePlayer(getGame().getPlugin(), lgp.getPlayer());
this.callback = callback;
openInventory(player.getPlayer());
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.getPlayer().getInventory().setItem(8, null);
player.stopChoosing();
closeInventory(player.getPlayer());
player.canSelectDead = false;
player.getPlayer().updateInventory();
hidePlayers(player);
//player.sendTitle("§cVous n'infectez personne", "§4Vous avez mis trop de temps à vous décider...", 80);
player.sendMessage("§6Tu n'as rien fait cette nuit.");
}
private void hidePlayers(LGPlayer player) { @Override
if(player.getPlayer() != null) { public int getTimeout() {
for(LGPlayer lgp : getGame().getInGame()) return 30;
if(lgp.getPlayer() != null && lgp != player) }
player.getPlayer().hidePlayer(getGame().getPlugin(), lgp.getPlayer());
}
}
boolean inMenu = false; @Override
final ArrayList<LGPlayer> ressucited = new ArrayList<>(); public boolean hasPlayersLeft() {
for (LGPlayer pretre : getPlayers())
for (LGPlayer lgp : getGame().getInGame())
if (lgp.isDead() && (lgp.getRoleType() == RoleType.VILLAGER || lgp.getRoleType() == pretre.getRoleType()))
return super.hasPlayersLeft();
return false;
}
private void closeInventory(Player p) { public void openInventory(Player player) {
inMenu = false; inMenu = true;
p.closeInventory(); Inventory inventory = Bukkit.createInventory(null, 9, "§7Veux-tu réssusciter quelqu'un ?");
} inventory.setContents(items.clone());
@EventHandler player.closeInventory();
public void onInventoryClick(InventoryClickEvent e) { player.openInventory(inventory);
ItemStack item = e.getCurrentItem(); }
Player player = (Player)e.getWhoClicked();
LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
if(lgp.getRole() != this || item == null || item.getItemMeta() == null)return; @Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
player.showView();
for (LGPlayer lgp : getGame().getInGame())
if (lgp.isDead() && (lgp.getRoleType() == RoleType.VILLAGER || lgp.getRoleType() == player.getRoleType())) {
if (lgp.getPlayer() != null) {
player.getPlayer().showPlayer(getGame().getPlugin(), lgp.getPlayer());
WrapperPlayServerEntityMetadata meta = new WrapperPlayServerEntityMetadata();
meta.setEntityID(lgp.getPlayer().getEntityId());
meta.setMetadata(Collections.singletonList(new WrappedWatchableObject(invisible, (byte) 0)));
meta.sendPacket(player.getPlayer());
}
} else
player.getPlayer().hidePlayer(getGame().getPlugin(), lgp.getPlayer());
this.callback = callback;
openInventory(player.getPlayer());
}
if(item.getItemMeta().getDisplayName().equals(items[3].getItemMeta().getDisplayName())) { @Override
e.setCancelled(true); protected void onNightTurnTimeout(LGPlayer player) {
closeInventory(player); player.getPlayer().getInventory().setItem(8, null);
lgp.sendMessage("§6Tu n'as rien fait cette nuit."); player.stopChoosing();
hidePlayers(lgp); closeInventory(player.getPlayer());
lgp.hideView(); player.canSelectDead = false;
callback.run(); player.getPlayer().updateInventory();
}else if(item.getItemMeta().getDisplayName().equals(items[5].getItemMeta().getDisplayName())) { hidePlayers(player);
e.setCancelled(true); //player.sendTitle("§cVous n'infectez personne", "§4Vous avez mis trop de temps à vous décider...", 80);
closeInventory(player); player.sendMessage("§6Tu n'as rien fait cette nuit.");
player.getInventory().setItem(8, items[3]); }
player.updateInventory();
//Pour éviter les missclick private void hidePlayers(LGPlayer player) {
WrapperPlayServerHeldItemSlot held = new WrapperPlayServerHeldItemSlot(); if (player.getPlayer() != null) {
held.setSlot(0); for (LGPlayer lgp : getGame().getInGame())
held.sendPacket(player); if (lgp.getPlayer() != null && lgp != player)
lgp.sendMessage("§6Choisissez qui réssusciter."); player.getPlayer().hidePlayer(getGame().getPlugin(), lgp.getPlayer());
lgp.canSelectDead = true; }
lgp.choose(choosen -> { }
if(choosen != null) {
if(!choosen.isDead()) private void closeInventory(Player p) {
lgp.sendMessage("§7§l"+choosen.getName()+"§c n'est pas mort."); inMenu = false;
else if(lgp.getRoleType() == RoleType.LOUP_GAROU && choosen.getRoleType() == RoleType.NEUTRAL) { p.closeInventory();
lgp.sendMessage("§7§l"+choosen.getName()+"§c ne faisait ni partie du §a§lVillage§6 ni des §c§lLoups§6."); }
}else if(lgp.getRoleType() != RoleType.LOUP_GAROU && choosen.getRoleType() != RoleType.VILLAGER) {
lgp.sendMessage("§7§l"+choosen.getName()+"§c ne faisait pas partie du §a§lVillage§6."); @EventHandler
} else { public void onInventoryClick(InventoryClickEvent e) {
player.getInventory().setItem(8, null); ItemStack item = e.getCurrentItem();
player.updateInventory(); Player player = (Player) e.getWhoClicked();
lgp.stopChoosing(); LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
lgp.canSelectDead = false;
lgp.sendMessage("§6Tu as ramené §7§l"+choosen.getName()+"§6 à la vie."); if (lgp.getRole() != this || item == null || item.getItemMeta() == null) return;
lgp.sendActionBarMessage("§7§l"+choosen.getName()+"§6 sera réssuscité");
if (item.getItemMeta().getDisplayName().equals(items[3].getItemMeta().getDisplayName())) {
e.setCancelled(true);
closeInventory(player);
lgp.sendMessage("§6Tu n'as rien fait cette nuit.");
hidePlayers(lgp);
lgp.hideView();
callback.run();
} else if (item.getItemMeta().getDisplayName().equals(items[5].getItemMeta().getDisplayName())) {
e.setCancelled(true);
closeInventory(player);
player.getInventory().setItem(8, items[3]);
player.updateInventory();
//Pour éviter les missclick
WrapperPlayServerHeldItemSlot held = new WrapperPlayServerHeldItemSlot();
held.setSlot(0);
held.sendPacket(player);
lgp.sendMessage("§6Choisissez qui réssusciter.");
lgp.canSelectDead = true;
lgp.choose(choosen -> {
if (choosen != null) {
if (!choosen.isDead())
lgp.sendMessage("§7§l" + choosen.getName() + "§c n'est pas mort.");
else if (lgp.getRoleType() == RoleType.LOUP_GAROU && choosen.getRoleType() == RoleType.NEUTRAL) {
lgp.sendMessage("§7§l" + choosen.getName() + "§c ne faisait ni partie du §a§lVillage§6 ni des §c§lLoups§6.");
} else if (lgp.getRoleType() != RoleType.LOUP_GAROU && choosen.getRoleType() != RoleType.VILLAGER) {
lgp.sendMessage("§7§l" + choosen.getName() + "§c ne faisait pas partie du §a§lVillage§6.");
} else {
player.getInventory().setItem(8, null);
player.updateInventory();
lgp.stopChoosing();
lgp.canSelectDead = false;
lgp.sendMessage("§6Tu as ramené §7§l" + choosen.getName() + "§6 à la vie.");
lgp.sendActionBarMessage("§7§l" + choosen.getName() + "§6 sera réssuscité");
ressucited.add(choosen); ressucited.add(choosen);
getPlayers().remove(lgp);//Pour éviter qu'il puisse sauver plusieurs personnes. getPlayers().remove(lgp);//Pour éviter qu'il puisse sauver plusieurs personnes.
choosen.sendMessage("§6Tu vas être réssuscité en tant que §a§lVillageois§6."); choosen.sendMessage("§6Tu vas être réssuscité en tant que §a§lVillageois§6.");
hidePlayers(lgp); hidePlayers(lgp);
lgp.hideView(); lgp.hideView();
callback.run(); callback.run();
} }
} }
}, lgp); }, lgp);
} }
} }
@EventHandler
public void onClick(PlayerInteractEvent e) {
Player player = e.getPlayer();
LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
if(lgp.getRole() == this) {
if(e.getItem() != null && e.getItem().hasItemMeta() && e.getItem().getItemMeta().getDisplayName().equals(items[3].getItemMeta().getDisplayName())) {
e.setCancelled(true);
player.getInventory().setItem(8, null);
player.updateInventory();
lgp.stopChoosing();
lgp.sendMessage("§6Tu n'as rien fait cette nuit.");
lgp.canSelectDead = false;
hidePlayers(lgp);
callback.run();
}
}
}
@EventHandler(priority = EventPriority.HIGHEST) @EventHandler
public void onDayStart(LGPreDayStartEvent e) { public void onClick(PlayerInteractEvent e) {
if(e.getGame() == getGame()) Player player = e.getPlayer();
if(ressucited.size() > 0) { LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
for(LGPlayer lgp : ressucited) { if (lgp.getRole() == this) {
if(lgp.getPlayer() == null || !lgp.isDead()) if (e.getItem() != null && e.getItem().hasItemMeta() && e.getItem().getItemMeta().getDisplayName().equals(items[3].getItemMeta().getDisplayName())) {
continue; e.setCancelled(true);
lgp.setDead(false); player.getInventory().setItem(8, null);
lgp.getCache().reset(); player.updateInventory();
RVillageois villagers = null; lgp.stopChoosing();
for(Role role : getGame().getRoles()) lgp.sendMessage("§6Tu n'as rien fait cette nuit.");
if(role instanceof RVillageois) lgp.canSelectDead = false;
villagers = (RVillageois)role; hidePlayers(lgp);
if(villagers == null) callback.run();
getGame().getRoles().add(villagers = new RVillageois(getGame())); }
villagers.join(lgp, false);//Le joueur réssuscité rejoint les villageois. }
lgp.setRole(villagers); }
lgp.getPlayer().removePotionEffect(PotionEffectType.INVISIBILITY);
lgp.getPlayer().getInventory().setHelmet(null);
lgp.getPlayer().updateInventory();
LGCustomItems.updateItem(lgp);
lgp.joinChat(getGame().getDayChat());//Pour qu'il ne parle plus dans le chat des morts (et ne le voit plus) et qu'il parle dans le chat des vivants @EventHandler(priority = EventPriority.HIGHEST)
VariousUtils.setWarning(lgp.getPlayer(), true); public void onDayStart(LGPreDayStartEvent e) {
if (e.getGame() == getGame())
if (ressucited.size() > 0) {
for (LGPlayer lgp : ressucited) {
if (lgp.getPlayer() == null || !lgp.isDead())
continue;
lgp.setDead(false);
lgp.getCache().reset();
RVillageois villagers = null;
for (Role role : getGame().getRoles())
if (role instanceof RVillageois)
villagers = (RVillageois) role;
if (villagers == null)
getGame().getRoles().add(villagers = new RVillageois(getGame()));
villagers.join(lgp, false);//Le joueur réssuscité rejoint les villageois.
lgp.setRole(villagers);
lgp.getPlayer().removePotionEffect(PotionEffectType.INVISIBILITY);
lgp.getPlayer().getInventory().setHelmet(null);
lgp.getPlayer().updateInventory();
LGCustomItems.updateItem(lgp);
getGame().updateRoleScoreboard(); lgp.joinChat(getGame().getDayChat());//Pour qu'il ne parle plus dans le chat des morts (et ne le voit plus) et qu'il parle dans le chat des vivants
VariousUtils.setWarning(lgp.getPlayer(), true);
getGame().broadcastMessage("§7§l"+lgp.getName()+"§6 a été ressuscité cette nuit."); getGame().updateRoleScoreboard();
for(LGPlayer player : getGame().getInGame()) getGame().broadcastMessage("§7§l" + lgp.getName() + "§6 a été ressuscité cette nuit.");
if(player.getPlayer() != null && player != lgp) {
player.getPlayer().showPlayer(getGame().getPlugin(), lgp.getPlayer());
}
}
ressucited.clear();
}
}
@EventHandler
public void onQuitInventory(InventoryCloseEvent e) {
if(e.getInventory() instanceof CraftInventoryCustom) {
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), (Player)e.getPlayer());
if(player.getRole() == this && inMenu) {
new BukkitRunnable() {
@Override for (LGPlayer player : getGame().getInGame())
public void run() { if (player.getPlayer() != null && player != lgp) {
e.getPlayer().openInventory(e.getInventory()); player.getPlayer().showPlayer(getGame().getPlugin(), lgp.getPlayer());
} }
}.runTaskLater(MainLg.getInstance(), 1); }
} ressucited.clear();
} }
} }
@EventHandler
public void onQuitInventory(InventoryCloseEvent e) {
if (e.getInventory() instanceof CraftInventoryCustom) {
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), (Player) e.getPlayer());
if (player.getRole() == this && inMenu) {
new BukkitRunnable() {
@Override
public void run() {
e.getPlayer().openInventory(e.getInventory());
}
}.runTaskLater(MainLg.getInstance(), 1);
}
}
}
} }

View file

@ -3,66 +3,76 @@ package fr.leomelki.loupgarou.roles;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
public class RPronostiqueur extends Role{ public class RPronostiqueur extends Role {
public RPronostiqueur(LGGame game) { public RPronostiqueur(LGGame game) {
super(game); super(game);
} }
@Override
public RoleType getType() {
return RoleType.VILLAGER;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@Override
public String getName() {
return "§a§lPronostiqueur";
}
@Override
public String getFriendlyName() {
return "du "+getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. Chaque nuit, tu peux espionner un joueur et découvrir s'il est gentil ou non. Cependant, dans certaines parties, vos pronostiques ne sont pas exacts...";
}
@Override
public String getTask() {
return "Choisis un joueur sur lequel pronostiquer.";
}
@Override
public String getBroadcastedTask() {
return "Le "+getName()+"§9 s'apprête à pronostiquer...";
}
@Override
public int getTimeout() {
return 15;
}
@Override @Override
protected void onNightTurn(LGPlayer player, Runnable callback) { public RoleType getType() {
player.showView(); return RoleType.VILLAGER;
}
player.choose(choosen -> { @Override
if(choosen != null && choosen != player) { public RoleWinType getWinType() {
//player.sendTitle("§6Vous avez regardé un rôle", "§e§l"+choosen.getName()+"§6§l est §e§l"+choosen.getRole().getName(), 5*20); return RoleWinType.VILLAGE;
String gentilMechant = choosen.getRoleWinType() == RoleWinType.VILLAGE || choosen.getRoleWinType() == RoleWinType.NONE ? "§a§lgentil" : "§c§lméchant"; }
player.sendActionBarMessage("§e§l"+choosen.getName()+"§6 est "+gentilMechant);
player.sendMessage("§6Votre instinct vous dit que §7§l"+choosen.getName()+"§6 est "+gentilMechant+"§6."); @Override
player.stopChoosing(); public String getName() {
player.hideView(); return "§a§lPronostiqueur";
callback.run(); }
}
}); @Override
} public String getFriendlyName() {
@Override return "du " + getName();
protected void onNightTurnTimeout(LGPlayer player) { }
player.stopChoosing();
player.hideView(); @Override
} public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. Chaque nuit, tu peux espionner un joueur et découvrir s'il est gentil ou non. Cependant, dans certaines parties, vos pronostiques ne sont pas exacts...";
}
@Override
public String getTask() {
return "Choisis un joueur sur lequel pronostiquer.";
}
@Override
public String getBroadcastedTask() {
return "Le " + getName() + "§9 s'apprête à pronostiquer...";
}
@Override
public int getTimeout() {
return 15;
}
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
player.showView();
player.choose(choosen -> {
if (choosen != null && choosen != player) {
//player.sendTitle("§6Vous avez regardé un rôle", "§e§l"+choosen.getName()+"§6§l est §e§l"+choosen.getRole().getName(), 5*20);
String gentilMechant = choosen.getRoleWinType() == RoleWinType.VILLAGE || choosen.getRoleWinType() == RoleWinType.NONE ? "§a§lgentil" : "§c§lméchant";
player.sendActionBarMessage("§e§l" + choosen.getName() + "§6 est " + gentilMechant);
player.sendMessage("§6Votre instinct vous dit que §7§l" + choosen.getName() + "§6 est " + gentilMechant + "§6.");
player.stopChoosing();
player.hideView();
callback.run();
}
});
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.stopChoosing();
player.hideView();
}
} }

View file

@ -1,10 +1,15 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import java.util.ArrayList; import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerHeldItemSlot;
import java.util.Arrays; import fr.leomelki.loupgarou.MainLg;
import java.util.Collections; import fr.leomelki.loupgarou.classes.LGGame;
import java.util.List; import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.classes.LGWinType;
import fr.leomelki.loupgarou.events.LGEndCheckEvent;
import fr.leomelki.loupgarou.events.LGGameEndEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import fr.leomelki.loupgarou.events.LGPyromaneGasoilEvent;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryCustom; import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryCustom;
@ -19,287 +24,290 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerHeldItemSlot; import java.util.ArrayList;
import fr.leomelki.loupgarou.MainLg; import java.util.Arrays;
import fr.leomelki.loupgarou.classes.LGGame; import java.util.Collections;
import fr.leomelki.loupgarou.classes.LGPlayer; import java.util.List;
import fr.leomelki.loupgarou.classes.LGWinType;
import fr.leomelki.loupgarou.events.LGEndCheckEvent;
import fr.leomelki.loupgarou.events.LGGameEndEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent;
import fr.leomelki.loupgarou.events.LGPyromaneGasoilEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
public class RPyromane extends Role{ public class RPyromane extends Role {
static final ItemStack[] items = new ItemStack[9]; static final ItemStack[] items = new ItemStack[9];
static final ItemStack cancel; static final ItemStack cancel;
static final ItemStack nothing; static final ItemStack nothing;
static {
cancel = new ItemStack(Material.IRON_NUGGET);
ItemMeta meta = cancel.getItemMeta();
meta.setDisplayName("§7§lAnnuler");
meta.setLore(Collections.singletonList("§8Rouvrir le menu"));
cancel.setItemMeta(meta);
nothing = new ItemStack(Material.IRON_NUGGET);
meta = nothing.getItemMeta();
meta.setDisplayName("§7§lNe rien faire");
nothing.setItemMeta(meta);
items[3] = new ItemStack(Material.FLINT_AND_STEEL);
meta = items[3].getItemMeta();
meta.setDisplayName("§e§lMettre le feu");
meta.setLore(Arrays.asList(
"§8Tuez les joueurs que vous avez",
"§8Précédemment recouvert de gasoil."));
items[3].setItemMeta(meta);
items[5] = new ItemStack(Material.LAVA_BUCKET);
meta = items[5].getItemMeta();
meta.setDisplayName("§c§lRecouvrir d'essence");
meta.setLore(Collections.singletonList(
"§8Recouvres deux joueurs d'essence"));
items[5].setItemMeta(meta);
}
public RPyromane(LGGame game) { static {
super(game); cancel = new ItemStack(Material.IRON_NUGGET);
} ItemMeta meta = cancel.getItemMeta();
meta.setDisplayName("§7§lAnnuler");
meta.setLore(Collections.singletonList("§8Rouvrir le menu"));
cancel.setItemMeta(meta);
nothing = new ItemStack(Material.IRON_NUGGET);
meta = nothing.getItemMeta();
meta.setDisplayName("§7§lNe rien faire");
nothing.setItemMeta(meta);
items[3] = new ItemStack(Material.FLINT_AND_STEEL);
meta = items[3].getItemMeta();
meta.setDisplayName("§e§lMettre le feu");
meta.setLore(Arrays.asList(
"§8Tuez les joueurs que vous avez",
"§8Précédemment recouvert de gasoil."));
items[3].setItemMeta(meta);
items[5] = new ItemStack(Material.LAVA_BUCKET);
meta = items[5].getItemMeta();
meta.setDisplayName("§c§lRecouvrir d'essence");
meta.setLore(Collections.singletonList(
"§8Recouvres deux joueurs d'essence"));
items[5].setItemMeta(meta);
}
@Override Runnable callback;
public String getName() { boolean inMenu = false;
return "§6§lPyromane"; LGPlayer first;
}
@Override public RPyromane(LGGame game) {
public String getFriendlyName() { super(game);
return "du "+getName(); }
}
@Override @Override
public String getShortDescription() { public String getName() {
return "Tu gagnes §7§lSEUL"; return "§6§lPyromane";
} }
@Override @Override
public String getDescription() { public String getFriendlyName() {
return "Tu gagnes §7§lSEUL§f. Chaque nuit, tu peux recouvrir de gasoil deux joueurs au choix, ou immoler tous ceux que tu as précédemment visités. Les joueurs sauront qu'ils ont été recouverts de gasoil."; return "du " + getName();
} }
@Override @Override
public String getTask() { public String getShortDescription() {
return "Que veux-tu faire cette nuit ?"; return "Tu gagnes §7§lSEUL";
} }
@Override @Override
public String getBroadcastedTask() { public String getDescription() {
return "Le "+getName()+"§9 joue avec une allumette..."; return "Tu gagnes §7§lSEUL§f. Chaque nuit, tu peux recouvrir de gasoil deux joueurs au choix, ou immoler tous ceux que tu as précédemment visités. Les joueurs sauront qu'ils ont été recouverts de gasoil.";
} }
@Override
public RoleType getType() {
return RoleType.NEUTRAL;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.SEUL;
}
@Override @Override
public int getTimeout() { public String getTask() {
return 30; return "Que veux-tu faire cette nuit ?";
} }
Runnable callback; @Override
public String getBroadcastedTask() {
return "Le " + getName() + "§9 joue avec une allumette...";
}
public void openInventory(Player player) { @Override
inMenu = true; public RoleType getType() {
Inventory inventory = Bukkit.createInventory(null, 9, "§7Que veux-tu faire ?"); return RoleType.NEUTRAL;
ItemStack[] content = items.clone(); }
LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
if(!lgp.getCache().has("pyromane_essence"))
lgp.getCache().set("pyromane_essence", new ArrayList<>());
if(lgp.getCache().<List<LGPlayer>>get("pyromane_essence").size() == 0)
content[3] = nothing;
inventory.setContents(content);
player.closeInventory();
player.openInventory(inventory);
}
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
first = null;
player.showView();
this.callback = callback;
openInventory(player.getPlayer());
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
if(first != null) {
List<LGPlayer> liste = player.getCache().get("pyromane_essence");
LGPyromaneGasoilEvent event = new LGPyromaneGasoilEvent(getGame(), first);
Bukkit.getPluginManager().callEvent(event);
if(event.isCancelled())
player.sendMessage("§7§l"+event.getPlayer().getName()+"§c est immunisé.");
else {
event.getPlayer().sendMessage("§6Tu es recouvert de gasoil...");
liste.add(event.getPlayer());
}
}
player.getPlayer().getInventory().setItem(8, null);
player.stopChoosing();
closeInventory(player.getPlayer());
player.getPlayer().updateInventory();
player.hideView();
player.sendMessage("§6Tu n'as rien fait cette nuit.");
}
boolean inMenu = false; @Override
LGPlayer first; public RoleWinType getWinType() {
return RoleWinType.SEUL;
}
private void closeInventory(Player p) { @Override
inMenu = false; public int getTimeout() {
p.closeInventory(); return 30;
} }
@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
ItemStack item = e.getCurrentItem();
Player player = (Player)e.getWhoClicked();
LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
if(lgp.getRole() != this || item == null || item.getItemMeta() == null)return; public void openInventory(Player player) {
if(item.getItemMeta().getDisplayName().equals(nothing.getItemMeta().getDisplayName())) { inMenu = true;
lgp.stopChoosing(); Inventory inventory = Bukkit.createInventory(null, 9, "§7Que veux-tu faire ?");
closeInventory(player); ItemStack[] content = items.clone();
lgp.hideView(); LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
lgp.sendMessage("§6Tu n'as rien fait cette nuit."); if (!lgp.getCache().has("pyromane_essence"))
callback.run(); lgp.getCache().set("pyromane_essence", new ArrayList<>());
}else if(item.getItemMeta().getDisplayName().equals(items[3].getItemMeta().getDisplayName())) { if (lgp.getCache().<List<LGPlayer>>get("pyromane_essence").size() == 0)
e.setCancelled(true); content[3] = nothing;
closeInventory(player); inventory.setContents(content);
if(lgp.getCache().<List<LGPlayer>>get("pyromane_essence").size() != 0) { player.closeInventory();
List<LGPlayer> liste = lgp.getCache().get("pyromane_essence"); player.openInventory(inventory);
for(LGPlayer scndPlayer : liste) { }
if(!scndPlayer.isDead() && scndPlayer.getPlayer() != null) {
getGame().kill(scndPlayer, Reason.PYROMANE);
}
}
liste.clear();
lgp.sendMessage("§6§lTu as décidé de brûler tes victimes ce soir.");
lgp.sendActionBarMessage("§6Tes victimes brûleront ce soir.");
}else
lgp.sendMessage("§6§lPersonne n'a pris feu.");
lgp.hideView();
callback.run();
}else if(item.getItemMeta().getDisplayName().equals(items[5].getItemMeta().getDisplayName())) {
e.setCancelled(true);
closeInventory(player);
player.getInventory().setItem(8, cancel);
player.updateInventory();
//Pour éviter les missclick
WrapperPlayServerHeldItemSlot held = new WrapperPlayServerHeldItemSlot();
held.setSlot(0);
held.sendPacket(player);
lgp.sendMessage("§6Choisis deux joueurs à recouvrir de gasoil.");
lgp.choose(choosen -> {
if(choosen != null) {
if(choosen == first) {
lgp.sendMessage("§cTu as déjà versé du gasoil sur §7§l"+choosen.getName()+"§6.");
return;
}
List<LGPlayer> liste = lgp.getCache().get("pyromane_essence");
if(liste.contains(choosen)) {
lgp.sendMessage("§7§l"+choosen.getName()+"§c est déjà recouvert de gasoil.");
return;
}
if(first == choosen) {
lgp.sendMessage("§cVous avez déjà sélectionné §7§l"+choosen.getName()+"§c.");
return;
}
player.getInventory().setItem(8, null);
player.updateInventory();
lgp.sendMessage("§6Tu as versé du gasoil sur §7§l"+choosen.getName()+"§6.");
lgp.sendActionBarMessage("§6§7§l"+choosen.getName()+"§6 est recouvert de gasoil");
if(first != null || getGame().getAlive().size() == 2) {
lgp.hideView();
lgp.stopChoosing();
LGPyromaneGasoilEvent event = new LGPyromaneGasoilEvent(getGame(), choosen);
Bukkit.getPluginManager().callEvent(event);
if(event.isCancelled())
lgp.sendMessage("§7§l"+event.getPlayer().getName()+"§c est immunisée.");
else {
event.getPlayer().sendMessage("§6Tu es recouvert de gasoil...");
liste.add(event.getPlayer());
}
if(first != null) {
event = new LGPyromaneGasoilEvent(getGame(), first);
Bukkit.getPluginManager().callEvent(event);
if(event.isCancelled())
lgp.sendMessage("§7§l"+event.getPlayer().getName()+"§c est immunisée.");
else {
event.getPlayer().sendMessage("§6Tu es recouvert de gasoil...");
liste.add(event.getPlayer());
}
}
callback.run();
} else {
lgp.sendMessage("§6Choisis un deuxième joueur à recouvrir de gasoil.");
first = choosen;
}
}
}, lgp);
}
}
@EventHandler
public void onClick(PlayerInteractEvent e) {
Player player = e.getPlayer();
LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
if(lgp.getRole() == this) {
if(e.getItem() != null && e.getItem().hasItemMeta() && e.getItem().getItemMeta().getDisplayName().equals(cancel.getItemMeta().getDisplayName())) {
e.setCancelled(true);
player.getInventory().setItem(8, null);
player.updateInventory();
lgp.stopChoosing();
openInventory(player);
}
}
}
@EventHandler
public void onKilled(LGPlayerKilledEvent e) {
if(e.getGame() == getGame())
for(LGPlayer lgp : getPlayers())
if(lgp.getCache().has("pyromane_essence")) {
List<LGPlayer> liste = lgp.getCache().get("pyromane_essence");
//Au cas le mec soit rez
liste.remove(e.getKilled());
}
}
@EventHandler
public void onQuitInventory(InventoryCloseEvent e) {
if(e.getInventory() instanceof CraftInventoryCustom) {
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), (Player)e.getPlayer());
if(player.getRole() == this && inMenu) {
new BukkitRunnable() {
@Override @Override
public void run() { protected void onNightTurn(LGPlayer player, Runnable callback) {
e.getPlayer().openInventory(e.getInventory()); first = null;
} player.showView();
}.runTaskLater(MainLg.getInstance(), 1); this.callback = callback;
} openInventory(player.getPlayer());
} }
}
//Win condition @Override
protected void onNightTurnTimeout(LGPlayer player) {
if (first != null) {
List<LGPlayer> liste = player.getCache().get("pyromane_essence");
LGPyromaneGasoilEvent event = new LGPyromaneGasoilEvent(getGame(), first);
Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled())
player.sendMessage("§7§l" + event.getPlayer().getName() + "§c est immunisé.");
else {
event.getPlayer().sendMessage("§6Tu es recouvert de gasoil...");
liste.add(event.getPlayer());
}
}
player.getPlayer().getInventory().setItem(8, null);
player.stopChoosing();
closeInventory(player.getPlayer());
player.getPlayer().updateInventory();
player.hideView();
player.sendMessage("§6Tu n'as rien fait cette nuit.");
}
@EventHandler private void closeInventory(Player p) {
public void onEndgameCheck(LGEndCheckEvent e) { inMenu = false;
if(e.getGame() == getGame() && e.getWinType() == LGWinType.SOLO) { p.closeInventory();
if(getPlayers().size() > 0) }
e.setWinType(LGWinType.PYROMANE);
} @EventHandler
} public void onInventoryClick(InventoryClickEvent e) {
@EventHandler(priority = EventPriority.HIGHEST) ItemStack item = e.getCurrentItem();
public void onEndGame(LGGameEndEvent e) { Player player = (Player) e.getWhoClicked();
if(e.getWinType() == LGWinType.PYROMANE) { LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
e.getWinners().clear();
e.getWinners().addAll(getPlayers()); if (lgp.getRole() != this || item == null || item.getItemMeta() == null) return;
} if (item.getItemMeta().getDisplayName().equals(nothing.getItemMeta().getDisplayName())) {
} lgp.stopChoosing();
closeInventory(player);
lgp.hideView();
lgp.sendMessage("§6Tu n'as rien fait cette nuit.");
callback.run();
} else if (item.getItemMeta().getDisplayName().equals(items[3].getItemMeta().getDisplayName())) {
e.setCancelled(true);
closeInventory(player);
if (lgp.getCache().<List<LGPlayer>>get("pyromane_essence").size() != 0) {
List<LGPlayer> liste = lgp.getCache().get("pyromane_essence");
for (LGPlayer scndPlayer : liste) {
if (!scndPlayer.isDead() && scndPlayer.getPlayer() != null) {
getGame().kill(scndPlayer, Reason.PYROMANE);
}
}
liste.clear();
lgp.sendMessage("§6§lTu as décidé de brûler tes victimes ce soir.");
lgp.sendActionBarMessage("§6Tes victimes brûleront ce soir.");
} else
lgp.sendMessage("§6§lPersonne n'a pris feu.");
lgp.hideView();
callback.run();
} else if (item.getItemMeta().getDisplayName().equals(items[5].getItemMeta().getDisplayName())) {
e.setCancelled(true);
closeInventory(player);
player.getInventory().setItem(8, cancel);
player.updateInventory();
//Pour éviter les missclick
WrapperPlayServerHeldItemSlot held = new WrapperPlayServerHeldItemSlot();
held.setSlot(0);
held.sendPacket(player);
lgp.sendMessage("§6Choisis deux joueurs à recouvrir de gasoil.");
lgp.choose(choosen -> {
if (choosen != null) {
if (choosen == first) {
lgp.sendMessage("§cTu as déjà versé du gasoil sur §7§l" + choosen.getName() + "§6.");
return;
}
List<LGPlayer> liste = lgp.getCache().get("pyromane_essence");
if (liste.contains(choosen)) {
lgp.sendMessage("§7§l" + choosen.getName() + "§c est déjà recouvert de gasoil.");
return;
}
if (first == choosen) {
lgp.sendMessage("§cVous avez déjà sélectionné §7§l" + choosen.getName() + "§c.");
return;
}
player.getInventory().setItem(8, null);
player.updateInventory();
lgp.sendMessage("§6Tu as versé du gasoil sur §7§l" + choosen.getName() + "§6.");
lgp.sendActionBarMessage("§6§7§l" + choosen.getName() + "§6 est recouvert de gasoil");
if (first != null || getGame().getAlive().size() == 2) {
lgp.hideView();
lgp.stopChoosing();
LGPyromaneGasoilEvent event = new LGPyromaneGasoilEvent(getGame(), choosen);
Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled())
lgp.sendMessage("§7§l" + event.getPlayer().getName() + "§c est immunisée.");
else {
event.getPlayer().sendMessage("§6Tu es recouvert de gasoil...");
liste.add(event.getPlayer());
}
if (first != null) {
event = new LGPyromaneGasoilEvent(getGame(), first);
Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled())
lgp.sendMessage("§7§l" + event.getPlayer().getName() + "§c est immunisée.");
else {
event.getPlayer().sendMessage("§6Tu es recouvert de gasoil...");
liste.add(event.getPlayer());
}
}
callback.run();
} else {
lgp.sendMessage("§6Choisis un deuxième joueur à recouvrir de gasoil.");
first = choosen;
}
}
}, lgp);
}
}
@EventHandler
public void onClick(PlayerInteractEvent e) {
Player player = e.getPlayer();
LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
if (lgp.getRole() == this) {
if (e.getItem() != null && e.getItem().hasItemMeta() && e.getItem().getItemMeta().getDisplayName().equals(cancel.getItemMeta().getDisplayName())) {
e.setCancelled(true);
player.getInventory().setItem(8, null);
player.updateInventory();
lgp.stopChoosing();
openInventory(player);
}
}
}
@EventHandler
public void onKilled(LGPlayerKilledEvent e) {
if (e.getGame() == getGame())
for (LGPlayer lgp : getPlayers())
if (lgp.getCache().has("pyromane_essence")) {
List<LGPlayer> liste = lgp.getCache().get("pyromane_essence");
//Au cas le mec soit rez
liste.remove(e.getKilled());
}
}
@EventHandler
public void onQuitInventory(InventoryCloseEvent e) {
if (e.getInventory() instanceof CraftInventoryCustom) {
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), (Player) e.getPlayer());
if (player.getRole() == this && inMenu) {
new BukkitRunnable() {
@Override
public void run() {
e.getPlayer().openInventory(e.getInventory());
}
}.runTaskLater(MainLg.getInstance(), 1);
}
}
}
//Win condition
@EventHandler
public void onEndgameCheck(LGEndCheckEvent e) {
if (e.getGame() == getGame() && e.getWinType() == LGWinType.SOLO) {
if (getPlayers().size() > 0)
e.setWinType(LGWinType.PYROMANE);
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onEndGame(LGGameEndEvent e) {
if (e.getWinType() == LGWinType.PYROMANE) {
e.getWinners().clear();
e.getWinners().addAll(getPlayers());
}
}
} }

View file

@ -1,7 +1,10 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import java.util.Collections; import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerHeldItemSlot;
import fr.leomelki.loupgarou.MainLg;
import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryCustom; import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryCustom;
@ -16,208 +19,218 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import fr.leomelki.com.comphenix.packetwrapper.WrapperPlayServerHeldItemSlot; import java.util.Collections;
import fr.leomelki.loupgarou.MainLg;
import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
public class RSorciere extends Role{ public class RSorciere extends Role {
private static final ItemStack[] items = new ItemStack[4]; private static final ItemStack[] items = new ItemStack[4];
private static final ItemStack cancel; private static final ItemStack cancel;
static {
items[0] = new ItemStack(Material.PURPLE_DYE, 1);
ItemMeta meta = items[0].getItemMeta();
meta.setDisplayName("§a§lPotion de vie");
meta.setLore(Collections.singletonList("§2Sauve la cible des §c§lLoups§2."));
items[0].setItemMeta(meta);
items[1] = new ItemStack(Material.IRON_NUGGET);
meta = items[1].getItemMeta();
meta.setDisplayName("§7§lNe rien faire");
items[1].setItemMeta(meta);
items[2] = new ItemStack(Material.LIGHT_BLUE_DYE, 1);
meta = items[2].getItemMeta();
meta.setDisplayName("§c§lPotion de mort");
meta.setLore(Collections.singletonList("§cTue la personne de ton choix."));
items[2].setItemMeta(meta);
cancel = new ItemStack(Material.IRON_NUGGET);
meta = cancel.getItemMeta();
meta.setDisplayName("§c§lRevenir au choix des potions");
cancel.setItemMeta(meta);
}
static {
items[0] = new ItemStack(Material.PURPLE_DYE, 1);
ItemMeta meta = items[0].getItemMeta();
meta.setDisplayName("§a§lPotion de vie");
meta.setLore(Collections.singletonList("§2Sauve la cible des §c§lLoups§2."));
items[0].setItemMeta(meta);
items[1] = new ItemStack(Material.IRON_NUGGET);
meta = items[1].getItemMeta();
meta.setDisplayName("§7§lNe rien faire");
items[1].setItemMeta(meta);
items[2] = new ItemStack(Material.LIGHT_BLUE_DYE, 1);
meta = items[2].getItemMeta();
meta.setDisplayName("§c§lPotion de mort");
meta.setLore(Collections.singletonList("§cTue la personne de ton choix."));
items[2].setItemMeta(meta);
cancel = new ItemStack(Material.IRON_NUGGET);
meta = cancel.getItemMeta();
meta.setDisplayName("§c§lRevenir au choix des potions");
cancel.setItemMeta(meta);
}
public RSorciere(LGGame game) { boolean inMenu = false;
super(game); private LGPlayer sauver;
} private Runnable callback;
@Override
public RoleType getType() {
return RoleType.VILLAGER;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@Override
public String getName() {
return "§a§lSorcière";
}
@Override
public String getFriendlyName() {
return "de la "+getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
@Override
public String getDescription() {
return "Tu gagnes avec le §a§lVillage§f. Tu disposes de deux potions : une §e§o§lpotion de vie§f pour sauver la victime des §c§lLoups§f, et une §e§o§lpotion de mort§f pour assassiner quelqu'un.";
}
@Override
public String getTask() {
return "Que veux-tu faire cette nuit ?";
}
@Override
public String getBroadcastedTask() {
return "La "+getName()+"§9 est en train de concocter un nouvel élixir.";
}
@Override
public int getTimeout() {
return 30;
}
private LGPlayer sauver; public RSorciere(LGGame game) {
private Runnable callback; super(game);
}
@Override @Override
protected void onNightTurn(LGPlayer player, Runnable callback) { public RoleType getType() {
player.showView(); return RoleType.VILLAGER;
this.callback = callback; }
sauver = getGame().getDeaths().get(Reason.LOUP_GAROU);
if(sauver == null)
sauver = getGame().getDeaths().get(Reason.DONT_DIE);
openInventory(player); @Override
} public RoleWinType getWinType() {
@Override return RoleWinType.VILLAGE;
protected void onNightTurnTimeout(LGPlayer player) { }
player.getPlayer().getInventory().setItem(8, null);
player.stopChoosing();
closeInventory(player.getPlayer());
player.getPlayer().updateInventory();
player.hideView();
//player.sendTitle("§cVous n'avez utilisé aucune potion", "§4Vous avez mis trop de temps à vous décider...", 80);
//player.sendMessage("§6Tu n'as rien fait cette nuit.");
}
private void openInventory(LGPlayer player) {
inMenu = true;
Inventory inventory = Bukkit.createInventory(null, InventoryType.BREWING, sauver == null ? "§7Personne n'a été ciblé" : "§7§l"+sauver.getName()+" §7est ciblé");
inventory.setContents(items.clone());//clone au cas Bukkit prenne directement la liste pour éviter de la modifier avec setItem (jsp)
if(sauver == null || player.getCache().getBoolean("witch_used_life"))
inventory.setItem(0, null);
if(sauver != null) { @Override
ItemStack head = new ItemStack(Material.ARROW); public String getName() {
ItemMeta meta = head.getItemMeta(); return "§a§lSorcière";
meta.setDisplayName("§7§l"+sauver.getName()+"§c est ciblé"); }
head.setItemMeta(meta);
inventory.setItem(4, head);
}
if(player.getCache().getBoolean("witch_used_death"))
inventory.setItem(2, null);
player.getPlayer().closeInventory();
player.getPlayer().openInventory(inventory);
}
boolean inMenu = false;
private void closeInventory(Player p) { @Override
inMenu = false; public String getFriendlyName() {
p.closeInventory(); return "de la " + getName();
} }
@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
ItemStack item = e.getCurrentItem();
Player player = (Player) e.getWhoClicked();
LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
if (lgp.getRole() != this || item == null || item.getItemMeta() == null) @Override
return; public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
if (item.getItemMeta().getDisplayName().equals(items[0].getItemMeta().getDisplayName()) && sauver != null) {// Potion de vie @Override
e.setCancelled(true); public String getDescription() {
closeInventory(player); return "Tu gagnes avec le §a§lVillage§f. Tu disposes de deux potions : une §e§o§lpotion de vie§f pour sauver la victime des §c§lLoups§f, et une §e§o§lpotion de mort§f pour assassiner quelqu'un.";
saveLife(lgp); }
} else if (item.getItemMeta().getDisplayName().equals(items[1].getItemMeta().getDisplayName())) {// Cancel
e.setCancelled(true);
closeInventory(player);
lgp.sendMessage("§6Tu n'as rien fait cette nuit.");
lgp.hideView();
callback.run();
} else if (item.getItemMeta().getDisplayName().equals(items[2].getItemMeta().getDisplayName())) {// Potion de mort
e.setCancelled(true);
player.getInventory().setItem(8, cancel);
player.updateInventory();
//On le met sur le slot 0 pour éviter un missclick sur la croix @Override
WrapperPlayServerHeldItemSlot hold = new WrapperPlayServerHeldItemSlot(); public String getTask() {
hold.setSlot(0); return "Que veux-tu faire cette nuit ?";
hold.sendPacket(lgp.getPlayer()); }
closeInventory(player); @Override
lgp.choose((choosen) -> { public String getBroadcastedTask() {
if (choosen != null) { return "La " + getName() + "§9 est en train de concocter un nouvel élixir.";
lgp.stopChoosing(); }
kill(choosen, lgp);
}
}/*, sauver*/);//On peut tuer la personne qui a été tué par les loups (bien que cela ne serve à rien)
}
}
@EventHandler @Override
public void onClick(PlayerInteractEvent e) { public int getTimeout() {
Player p = e.getPlayer(); return 30;
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), p); }
if(e.getItem() != null && e.getItem().getType() == Material.IRON_NUGGET && player.getRole() == this) {
player.stopChoosing();
p.getInventory().setItem(8, null);
p.updateInventory();
openInventory(player); @Override
} protected void onNightTurn(LGPlayer player, Runnable callback) {
} player.showView();
@EventHandler this.callback = callback;
public void onQuitInventory(InventoryCloseEvent e) { sauver = getGame().getDeaths().get(Reason.LOUP_GAROU);
if(e.getInventory() instanceof CraftInventoryCustom) { if (sauver == null)
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), (Player)e.getPlayer()); sauver = getGame().getDeaths().get(Reason.DONT_DIE);
if(player.getRole() == this && inMenu) {
new BukkitRunnable() {
@Override openInventory(player);
public void run() { }
e.getPlayer().openInventory(e.getInventory());
}
}.runTaskLater(MainLg.getInstance(), 1);
}
}
}
private void kill(LGPlayer choosen, LGPlayer player) { @Override
player.getPlayer().getInventory().setItem(8, null); protected void onNightTurnTimeout(LGPlayer player) {
player.getPlayer().updateInventory(); player.getPlayer().getInventory().setItem(8, null);
player.getCache().set("witch_used_death", true); player.stopChoosing();
getGame().kill(choosen, Reason.SORCIERE); closeInventory(player.getPlayer());
player.sendMessage("§6Tu as décidé d'assassiner §7§l"+choosen.getName()+"§6."); player.getPlayer().updateInventory();
player.sendActionBarMessage("§7§l"+choosen.getName()+"§9 a été tué."); player.hideView();
player.hideView(); //player.sendTitle("§cVous n'avez utilisé aucune potion", "§4Vous avez mis trop de temps à vous décider...", 80);
callback.run(); //player.sendMessage("§6Tu n'as rien fait cette nuit.");
} }
private void saveLife(LGPlayer player) {
player.getCache().set("witch_used_life", true); private void openInventory(LGPlayer player) {
getGame().getDeaths().remove(Reason.LOUP_GAROU, sauver); inMenu = true;
player.sendMessage("§6Tu as décidé de sauver §7§l"+sauver.getName()+"§6."); Inventory inventory = Bukkit.createInventory(null, InventoryType.BREWING, sauver == null ? "§7Personne n'a été ciblé" : "§7§l" + sauver.getName() + " §7est ciblé");
player.sendActionBarMessage("§7§l"+sauver.getName()+"§9 a été sauvé."); inventory.setContents(items.clone());//clone au cas Bukkit prenne directement la liste pour éviter de la modifier avec setItem (jsp)
player.hideView(); if (sauver == null || player.getCache().getBoolean("witch_used_life"))
callback.run(); inventory.setItem(0, null);
}
if (sauver != null) {
ItemStack head = new ItemStack(Material.ARROW);
ItemMeta meta = head.getItemMeta();
meta.setDisplayName("§7§l" + sauver.getName() + "§c est ciblé");
head.setItemMeta(meta);
inventory.setItem(4, head);
}
if (player.getCache().getBoolean("witch_used_death"))
inventory.setItem(2, null);
player.getPlayer().closeInventory();
player.getPlayer().openInventory(inventory);
}
private void closeInventory(Player p) {
inMenu = false;
p.closeInventory();
}
@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
ItemStack item = e.getCurrentItem();
Player player = (Player) e.getWhoClicked();
LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
if (lgp.getRole() != this || item == null || item.getItemMeta() == null)
return;
if (item.getItemMeta().getDisplayName().equals(items[0].getItemMeta().getDisplayName()) && sauver != null) {// Potion de vie
e.setCancelled(true);
closeInventory(player);
saveLife(lgp);
} else if (item.getItemMeta().getDisplayName().equals(items[1].getItemMeta().getDisplayName())) {// Cancel
e.setCancelled(true);
closeInventory(player);
lgp.sendMessage("§6Tu n'as rien fait cette nuit.");
lgp.hideView();
callback.run();
} else if (item.getItemMeta().getDisplayName().equals(items[2].getItemMeta().getDisplayName())) {// Potion de mort
e.setCancelled(true);
player.getInventory().setItem(8, cancel);
player.updateInventory();
//On le met sur le slot 0 pour éviter un missclick sur la croix
WrapperPlayServerHeldItemSlot hold = new WrapperPlayServerHeldItemSlot();
hold.setSlot(0);
hold.sendPacket(lgp.getPlayer());
closeInventory(player);
lgp.choose((choosen) -> {
if (choosen != null) {
lgp.stopChoosing();
kill(choosen, lgp);
}
}/*, sauver*/);//On peut tuer la personne qui a été tué par les loups (bien que cela ne serve à rien)
}
}
@EventHandler
public void onClick(PlayerInteractEvent e) {
Player p = e.getPlayer();
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), p);
if (e.getItem() != null && e.getItem().getType() == Material.IRON_NUGGET && player.getRole() == this) {
player.stopChoosing();
p.getInventory().setItem(8, null);
p.updateInventory();
openInventory(player);
}
}
@EventHandler
public void onQuitInventory(InventoryCloseEvent e) {
if (e.getInventory() instanceof CraftInventoryCustom) {
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), (Player) e.getPlayer());
if (player.getRole() == this && inMenu) {
new BukkitRunnable() {
@Override
public void run() {
e.getPlayer().openInventory(e.getInventory());
}
}.runTaskLater(MainLg.getInstance(), 1);
}
}
}
private void kill(LGPlayer choosen, LGPlayer player) {
player.getPlayer().getInventory().setItem(8, null);
player.getPlayer().updateInventory();
player.getCache().set("witch_used_death", true);
getGame().kill(choosen, Reason.SORCIERE);
player.sendMessage("§6Tu as décidé d'assassiner §7§l" + choosen.getName() + "§6.");
player.sendActionBarMessage("§7§l" + choosen.getName() + "§9 a été tué.");
player.hideView();
callback.run();
}
private void saveLife(LGPlayer player) {
player.getCache().set("witch_used_life", true);
getGame().getDeaths().remove(Reason.LOUP_GAROU, sauver);
player.sendMessage("§6Tu as décidé de sauver §7§l" + sauver.getName() + "§6.");
player.sendActionBarMessage("§7§l" + sauver.getName() + "§9 a été sauvé.");
player.hideView();
callback.run();
}
} }

View file

@ -1,8 +1,15 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import java.util.Arrays; import fr.leomelki.loupgarou.MainLg;
import java.util.Collections; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.classes.LGWinType;
import fr.leomelki.loupgarou.events.LGGameEndEvent;
import fr.leomelki.loupgarou.events.LGNightPlayerPreKilledEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import fr.leomelki.loupgarou.events.LGPreDayStartEvent;
import fr.leomelki.loupgarou.events.LGVampiredEvent;
import fr.leomelki.loupgarou.utils.VariableCache;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryCustom; import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryCustom;
@ -15,188 +22,193 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import fr.leomelki.loupgarou.MainLg; import java.util.Arrays;
import fr.leomelki.loupgarou.classes.LGGame; import java.util.Collections;
import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.classes.LGWinType;
import fr.leomelki.loupgarou.events.LGGameEndEvent;
import fr.leomelki.loupgarou.events.LGNightPlayerPreKilledEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import fr.leomelki.loupgarou.events.LGPreDayStartEvent;
import fr.leomelki.loupgarou.events.LGVampiredEvent;
import fr.leomelki.loupgarou.utils.VariableCache;
public class RSurvivant extends Role{ public class RSurvivant extends Role {
public RSurvivant(LGGame game) { boolean inMenu;
super(game); Runnable callback;
}
@Override
public RoleType getType() {
return RoleType.NEUTRAL;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.NONE;
}
@Override
public String getName() {
return "§d§lSurvivant";
}
@Override
public String getFriendlyName() {
return "du "+getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes si tu remplis ton objectif";
}
@Override
public String getDescription() {
return "Tu es §d§lNeutre§f et tu gagnes si tu remplis ton objectif. Ton objectif est de survivre. Tu disposes de §l2§f protections. Chaque nuit, tu peux utiliser une protection pour ne pas être tué par les §c§lLoups§f. Tu peux gagner aussi bien avec les §a§lVillageois§f qu'avec les §c§lLoups§f, tu dois juste rester en vie jusqu'à la fin de la partie.";
}
@Override
public String getTask() {
return "Veux-tu utiliser une protection cette nuit ?";
}
@Override
public String getBroadcastedTask() {
return "Le "+getName()+"§9 décide s'il veut se protéger.";
}
@Override
public int getTimeout() {
return 15;
}
boolean inMenu;
public void openInventory(Player player) {
inMenu = true;
Inventory inventory = Bukkit.createInventory(null, 9, "§7Veux-tu te protéger ?");
ItemStack[] items = new ItemStack[9];
VariableCache cache = LGPlayer.thePlayer(getGame().getPlugin(), player).getCache();
if(cache.<Integer>get("survivant_left") > 0) {
items[3] = new ItemStack(Material.IRON_NUGGET);
ItemMeta meta = items[3].getItemMeta();
meta.setDisplayName("§7§lNe rien faire");
meta.setLore(Collections.singletonList("§8Passez votre tour"));
items[3].setItemMeta(meta);
items[5] = new ItemStack(Material.GOLD_NUGGET);
meta = items[5].getItemMeta();
meta.setDisplayName("§2§lSe protéger (§6§l"+cache.<Integer>get("survivant_left")+"§2§l restant)");
meta.setLore(Arrays.asList(
"§8Tu ne pourras pas être tué par",
"§8 les §c§lLoups§8 cette nuit."));
items[5].setItemMeta(meta);
} else {
items[4] = new ItemStack(Material.IRON_NUGGET);
ItemMeta meta = items[4].getItemMeta();
meta.setDisplayName("§7§lNe rien faire");
meta.setLore(Collections.singletonList("§8Passez votre tour"));
items[4].setItemMeta(meta);
}
player.closeInventory();
inventory.setContents(items);
player.openInventory(inventory);
}
@Override
public void join(LGPlayer player) {
super.join(player);
player.getCache().set("survivant_left", 2);
}
Runnable callback; public RSurvivant(LGGame game) {
@Override super(game);
protected void onNightTurn(LGPlayer player, Runnable callback) { }
player.showView();
this.callback = callback;
openInventory(player.getPlayer());
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.hideView();
closeInventory(player.getPlayer());
player.sendMessage("§4§oTu es sans défense...");
}
private void closeInventory(Player p) { @Override
inMenu = false; public RoleType getType() {
p.closeInventory(); return RoleType.NEUTRAL;
} }
@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
ItemStack item = e.getCurrentItem();
Player player = (Player)e.getWhoClicked();
LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
if(lgp.getRole() != this || item == null || item.getItemMeta() == null)return; @Override
public RoleWinType getWinType() {
return RoleWinType.NONE;
}
if(item.getType() == Material.IRON_NUGGET) { @Override
e.setCancelled(true); public String getName() {
lgp.sendMessage("§4§oTu es sans défense..."); return "§d§lSurvivant";
closeInventory(player); }
lgp.hideView();
callback.run();
}else if(item.getType() == Material.GOLD_NUGGET) {
e.setCancelled(true);
closeInventory(player);
lgp.sendActionBarMessage("§9§lTu as décidé de te protéger.");
lgp.sendMessage("§6Tu as décidé de te protéger.");
lgp.getCache().set("survivant_left", lgp.getCache().<Integer>get("survivant_left")-1);
lgp.getCache().set("survivant_protected", true);
lgp.hideView();
callback.run();
}
}
@EventHandler @Override
public void onPlayerKill(LGNightPlayerPreKilledEvent e) { public String getFriendlyName() {
if(e.getGame() == getGame() && (e.getReason() == Reason.LOUP_GAROU || e.getReason() == Reason.LOUP_BLANC || e.getReason() == Reason.GM_LOUP_GAROU || e.getReason() == Reason.ASSASSIN) && e.getKilled().getCache().getBoolean("survivant_protected") && e.getKilled().isRoleActive()) { return "du " + getName();
e.setReason(Reason.DONT_DIE); }
}
}
@EventHandler
public void onVampired(LGVampiredEvent e) {
if(e.getGame() == getGame() && e.getPlayer().getCache().getBoolean("survivant_protected"))
e.setProtect(true);
}
@EventHandler
public void onDayStart(LGPreDayStartEvent e) {
if(e.getGame() == getGame())
for(LGPlayer lgp : getGame().getInGame())
if(lgp.isRoleActive())
lgp.getCache().remove("survivant_protected");
}
@EventHandler @Override
public void onQuitInventory(InventoryCloseEvent e) { public String getShortDescription() {
if(e.getInventory() instanceof CraftInventoryCustom) { return "Tu gagnes si tu remplis ton objectif";
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), (Player)e.getPlayer()); }
if(player.getRole() == this && inMenu) {
new BukkitRunnable() {
@Override @Override
public void run() { public String getDescription() {
e.getPlayer().openInventory(e.getInventory()); return "Tu es §d§lNeutre§f et tu gagnes si tu remplis ton objectif. Ton objectif est de survivre. Tu disposes de §l2§f protections. Chaque nuit, tu peux utiliser une protection pour ne pas être tué par les §c§lLoups§f. Tu peux gagner aussi bien avec les §a§lVillageois§f qu'avec les §c§lLoups§f, tu dois juste rester en vie jusqu'à la fin de la partie.";
} }
}.runTaskLater(MainLg.getInstance(), 1);
} @Override
} public String getTask() {
} return "Veux-tu utiliser une protection cette nuit ?";
}
@Override
public String getBroadcastedTask() {
return "Le " + getName() + "§9 décide s'il veut se protéger.";
}
@Override
public int getTimeout() {
return 15;
}
public void openInventory(Player player) {
inMenu = true;
Inventory inventory = Bukkit.createInventory(null, 9, "§7Veux-tu te protéger ?");
ItemStack[] items = new ItemStack[9];
VariableCache cache = LGPlayer.thePlayer(getGame().getPlugin(), player).getCache();
if (cache.<Integer>get("survivant_left") > 0) {
items[3] = new ItemStack(Material.IRON_NUGGET);
ItemMeta meta = items[3].getItemMeta();
meta.setDisplayName("§7§lNe rien faire");
meta.setLore(Collections.singletonList("§8Passez votre tour"));
items[3].setItemMeta(meta);
items[5] = new ItemStack(Material.GOLD_NUGGET);
meta = items[5].getItemMeta();
meta.setDisplayName("§2§lSe protéger (§6§l" + cache.<Integer>get("survivant_left") + "§2§l restant)");
meta.setLore(Arrays.asList(
"§8Tu ne pourras pas être tué par",
"§8 les §c§lLoups§8 cette nuit."));
items[5].setItemMeta(meta);
} else {
items[4] = new ItemStack(Material.IRON_NUGGET);
ItemMeta meta = items[4].getItemMeta();
meta.setDisplayName("§7§lNe rien faire");
meta.setLore(Collections.singletonList("§8Passez votre tour"));
items[4].setItemMeta(meta);
}
player.closeInventory();
inventory.setContents(items);
player.openInventory(inventory);
}
@Override
public void join(LGPlayer player) {
super.join(player);
player.getCache().set("survivant_left", 2);
}
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
player.showView();
this.callback = callback;
openInventory(player.getPlayer());
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.hideView();
closeInventory(player.getPlayer());
player.sendMessage("§4§oTu es sans défense...");
}
private void closeInventory(Player p) {
inMenu = false;
p.closeInventory();
}
@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
ItemStack item = e.getCurrentItem();
Player player = (Player) e.getWhoClicked();
LGPlayer lgp = LGPlayer.thePlayer(getGame().getPlugin(), player);
if (lgp.getRole() != this || item == null || item.getItemMeta() == null) return;
if (item.getType() == Material.IRON_NUGGET) {
e.setCancelled(true);
lgp.sendMessage("§4§oTu es sans défense...");
closeInventory(player);
lgp.hideView();
callback.run();
} else if (item.getType() == Material.GOLD_NUGGET) {
e.setCancelled(true);
closeInventory(player);
lgp.sendActionBarMessage("§9§lTu as décidé de te protéger.");
lgp.sendMessage("§6Tu as décidé de te protéger.");
lgp.getCache().set("survivant_left", lgp.getCache().<Integer>get("survivant_left") - 1);
lgp.getCache().set("survivant_protected", true);
lgp.hideView();
callback.run();
}
}
@EventHandler
public void onPlayerKill(LGNightPlayerPreKilledEvent e) {
if (e.getGame() == getGame() && (e.getReason() == Reason.LOUP_GAROU || e.getReason() == Reason.LOUP_BLANC || e.getReason() == Reason.GM_LOUP_GAROU || e.getReason() == Reason.ASSASSIN) && e.getKilled().getCache().getBoolean("survivant_protected") && e.getKilled().isRoleActive()) {
e.setReason(Reason.DONT_DIE);
}
}
@EventHandler
public void onVampired(LGVampiredEvent e) {
if (e.getGame() == getGame() && e.getPlayer().getCache().getBoolean("survivant_protected"))
e.setProtect(true);
}
@EventHandler
public void onDayStart(LGPreDayStartEvent e) {
if (e.getGame() == getGame())
for (LGPlayer lgp : getGame().getInGame())
if (lgp.isRoleActive())
lgp.getCache().remove("survivant_protected");
}
@EventHandler
public void onQuitInventory(InventoryCloseEvent e) {
if (e.getInventory() instanceof CraftInventoryCustom) {
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), (Player) e.getPlayer());
if (player.getRole() == this && inMenu) {
new BukkitRunnable() {
@Override
public void run() {
e.getPlayer().openInventory(e.getInventory());
}
}.runTaskLater(MainLg.getInstance(), 1);
}
}
}
@EventHandler
public void onWin(LGGameEndEvent e) {
if (e.getGame() == getGame() && getPlayers().size() > 0 && e.getWinType() != LGWinType.ANGE) {
for (LGPlayer lgp : getPlayers())
e.getWinners().add(lgp);
new BukkitRunnable() {
@Override
public void run() {
@EventHandler getGame().broadcastMessage("§6§oLe " + getName() + "§6§o a rempli son objectif.");
public void onWin(LGGameEndEvent e) { }
if(e.getGame() == getGame() && getPlayers().size() > 0 && e.getWinType() != LGWinType.ANGE) { }.runTaskAsynchronously(MainLg.getInstance());
for(LGPlayer lgp : getPlayers()) }
e.getWinners().add(lgp); }
new BukkitRunnable() {
@Override
public void run() {
getGame().broadcastMessage("§6§oLe "+getName()+"§6§o a rempli son objectif.");
}
}.runTaskAsynchronously(MainLg.getInstance());
}
}
} }

View file

@ -1,219 +1,217 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import fr.leomelki.loupgarou.classes.*;
import fr.leomelki.loupgarou.classes.LGCustomItems.LGCustomItemsConstraints;
import fr.leomelki.loupgarou.classes.chat.LGChat;
import fr.leomelki.loupgarou.events.*;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import lombok.Getter;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map.Entry; import java.util.Map.Entry;
import org.bukkit.Bukkit; public class RVampire extends Role {
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import fr.leomelki.loupgarou.classes.LGCustomItems; @Getter
import fr.leomelki.loupgarou.classes.LGGame; private final LGChat chat = new LGChat((sender, message) -> "§5" + sender.getName() + " §6» §f" + message);
import fr.leomelki.loupgarou.classes.LGPlayer; int nextCanInfect = 0;
import fr.leomelki.loupgarou.classes.LGVote; LGVote vote;
import fr.leomelki.loupgarou.classes.LGWinType;
import fr.leomelki.loupgarou.classes.LGCustomItems.LGCustomItemsConstraints;
import fr.leomelki.loupgarou.classes.chat.LGChat;
import fr.leomelki.loupgarou.events.LGCustomItemChangeEvent;
import fr.leomelki.loupgarou.events.LGGameEndEvent;
import fr.leomelki.loupgarou.events.LGNightEndEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import fr.leomelki.loupgarou.events.LGUpdatePrefixEvent;
import fr.leomelki.loupgarou.events.LGVampiredEvent;
import lombok.Getter;
public class RVampire extends Role{ public RVampire(LGGame game) {
super(game);
}
public RVampire(LGGame game) { @Override
super(game); public String getName() {
} return "§5§lVampire";
}
@Override @Override
public String getName() { public String getFriendlyName() {
return "§5§lVampire"; return "des §5§lVampires";
} }
@Override @Override
public String getFriendlyName() { public String getShortDescription() {
return "des §5§lVampires"; return "Tu gagnes avec les §5§lVampires";
} }
@Override @Override
public String getShortDescription() { public String getDescription() {
return "Tu gagnes avec les §5§lVampires"; return "Tu gagnes avec les §5§lVampires§f. Chaque nuit, tu te réunis avec tes compères pour décider d'une victime à transformer en §5§lVampire§f... Lorsqu'une transformation a lieu, tous les §5§lVampires§f doivent se reposer la nuit suivante. Un joueur transformé perd tous les pouvoirs liés à son ancien rôle, et gagne avec les §5§lVampires§f.";
} }
@Override @Override
public String getDescription() { public String getTask() {
return "Tu gagnes avec les §5§lVampires§f. Chaque nuit, tu te réunis avec tes compères pour décider d'une victime à transformer en §5§lVampire§f... Lorsqu'une transformation a lieu, tous les §5§lVampires§f doivent se reposer la nuit suivante. Un joueur transformé perd tous les pouvoirs liés à son ancien rôle, et gagne avec les §5§lVampires§f."; return "Votez pour une cible à mordre.";
} }
@Override @Override
public String getTask() { public String getBroadcastedTask() {
return "Votez pour une cible à mordre."; return "Les §5§lVampires§9 choisissent leur cible.";
} }
@Override @Override
public String getBroadcastedTask() { public RoleType getType() {
return "Les §5§lVampires§9 choisissent leur cible."; return RoleType.VAMPIRE;
} }
@Override
public RoleType getType() {
return RoleType.VAMPIRE;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VAMPIRE;
}
@Override @Override
public int getTimeout() { public RoleWinType getWinType() {
return 30; return RoleWinType.VAMPIRE;
} }
@Override
public boolean hasPlayersLeft() {
return nextCanInfect < getGame().getNight() && super.hasPlayersLeft();
}
@Getter private final LGChat chat = new LGChat((sender, message) -> "§5"+sender.getName()+" §6» §f"+message); @Override
int nextCanInfect = 0; public int getTimeout() {
LGVote vote; return 30;
@Override }
public void join(LGPlayer player, boolean sendMessage) {
super.join(player, sendMessage);
for(LGPlayer p : getPlayers())
p.updatePrefix();
}
public void onNightTurn(Runnable callback) { @Override
vote = new LGVote(getTimeout(), getTimeout()/3, getGame(), false, false, (player, secondsLeft)-> !getPlayers().contains(player) ? "§6C'est au tour "+getFriendlyName()+" §6(§e"+secondsLeft+" s§6)" : player.getCache().has("vote") ? "§l§9Vous votez pour §c§l"+player.getCache().<LGPlayer>get("vote").getName() : "§6Il vous reste §e"+secondsLeft+" seconde"+(secondsLeft > 1 ? "s" : "")+"§6 pour voter"); public boolean hasPlayersLeft() {
for(LGPlayer lgp : getGame().getAlive()) return nextCanInfect < getGame().getNight() && super.hasPlayersLeft();
if(lgp.getRoleType() == RoleType.VAMPIRE) }
lgp.showView();
for(LGPlayer player : getPlayers()) {
player.sendMessage("§6"+getTask());
// player.sendTitle("§6C'est à vous de jouer", "§a"+getTask(), 100);
player.joinChat(chat);
}
vote.start(getPlayers(), getPlayers(), ()->{
onNightTurnEnd();
callback.run();
}, getPlayers());
}
private void onNightTurnEnd() {
for(LGPlayer lgp : getGame().getAlive())
if(lgp.getRoleType() == RoleType.VAMPIRE)
lgp.hideView();
for(LGPlayer player : getPlayers())
player.leaveChat();
LGPlayer choosen = vote.getChoosen(); @Override
if(choosen == null) { public void join(LGPlayer player, boolean sendMessage) {
if(vote.getVotes().size() > 0) { super.join(player, sendMessage);
int max = 0; for (LGPlayer p : getPlayers())
boolean equal = false; p.updatePrefix();
for(Entry<LGPlayer, List<LGPlayer>> entry : vote.getVotes().entrySet()) }
if(entry.getValue().size() > max) {
equal = false;
max = entry.getValue().size();
choosen = entry.getKey();
}else if(entry.getValue().size() == max)
equal = true;
if(equal) {
choosen = null;
ArrayList<LGPlayer> choosable = new ArrayList<>();
for(Entry<LGPlayer, List<LGPlayer>> entry : vote.getVotes().entrySet())
if(entry.getValue().size() == max && entry.getKey().getRoleType() != RoleType.VAMPIRE)
choosable.add(entry.getKey());
if(choosable.size() > 0)
choosen = choosable.get(getGame().getRandom().nextInt(choosable.size()));
}
}
}
if(choosen != null) {
if(choosen.getRoleType() == RoleType.LOUP_GAROU || choosen.getRoleType() == RoleType.VAMPIRE) {
for(LGPlayer player : getPlayers())
player.sendMessage("§cVotre cible est immunisée.");
return;
}else if(choosen.getRole() instanceof RChasseurDeVampire) {
for(LGPlayer player : getPlayers())
player.sendMessage("§cVotre cible est immunisée.");
getGame().kill(getPlayers().get(getPlayers().size()-1), Reason.CHASSEUR_DE_VAMPIRE);
return;
}
LGVampiredEvent event = new LGVampiredEvent(getGame(), choosen); public void onNightTurn(Runnable callback) {
Bukkit.getPluginManager().callEvent(event); vote = new LGVote(getTimeout(), getTimeout() / 3, getGame(), false, false, (player, secondsLeft) -> !getPlayers().contains(player) ? "§6C'est au tour " + getFriendlyName() + " §6(§e" + secondsLeft + " s§6)" : player.getCache().has("vote") ? "§l§9Vous votez pour §c§l" + player.getCache().<LGPlayer>get("vote").getName() : "§6Il vous reste §e" + secondsLeft + " seconde" + (secondsLeft > 1 ? "s" : "") + "§6 pour voter");
if(event.isImmuned()) { for (LGPlayer lgp : getGame().getAlive())
for(LGPlayer player : getPlayers()) if (lgp.getRoleType() == RoleType.VAMPIRE)
player.sendMessage("§cVotre cible est immunisée."); lgp.showView();
return; for (LGPlayer player : getPlayers()) {
}else if(event.isProtect()) { player.sendMessage("§6" + getTask());
for(LGPlayer player : getPlayers()) // player.sendTitle("§6C'est à vous de jouer", "§a"+getTask(), 100);
player.sendMessage("§cVotre cible est protégée."); player.joinChat(chat);
return; }
} vote.start(getPlayers(), getPlayers(), () -> {
for(LGPlayer player : getPlayers()) onNightTurnEnd();
player.sendMessage("§7§l"+choosen.getName()+" s'est transformé en §5§lVampire§6."); callback.run();
choosen.sendMessage("§6Tu as été infecté par les §5§lVampires §6pendant la nuit. Tu as perdu tes pouvoirs."); }, getPlayers());
choosen.sendMessage("§6§oTu gagnes désormais avec les §5§l§oVampires§6§o."); }
choosen.getCache().set("vampire", true);
choosen.getCache().set("just_vampire", true);
nextCanInfect = getGame().getNight()+1;
join(choosen, false);
LGCustomItems.updateItem(choosen);
}else
for(LGPlayer player : getPlayers())
player.sendMessage("§6Personne n'a été infecté.");
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onDayStart(LGNightEndEvent e) {
if(e.getGame() == getGame())
for(LGPlayer player : getGame().getAlive()) {
if(player.getCache().getBoolean("just_vampire")) {
player.getCache().remove("just_vampire");
for(LGPlayer lgp : getGame().getInGame()) {
if(lgp.getRoleType() == RoleType.VAMPIRE)
lgp.sendMessage("§7§l"+player.getName()+"§6 s'est transformé en §5§lVampire§6...");
else
lgp.sendMessage("§6Quelqu'un s'est transformé en §5§lVampire§6...");
}
if(getGame().checkEndGame()) private void onNightTurnEnd() {
e.setCancelled(true); for (LGPlayer lgp : getGame().getAlive())
} if (lgp.getRoleType() == RoleType.VAMPIRE)
} lgp.hideView();
} for (LGPlayer player : getPlayers())
player.leaveChat();
/* @EventHandler(priority = EventPriority.HIGHEST) LGPlayer choosen = vote.getChoosen();
public void onSkinChange(LGSkinLoadEvent e) { if (choosen == null) {
if(e.getGame() == getGame()) if (vote.getVotes().size() > 0) {
if(getPlayers().contains(e.getPlayer()) && getPlayers().contains(e.getTo()) && showSkins) { int max = 0;
e.getProfile().getProperties().removeAll("textures"); boolean equal = false;
e.getProfile().getProperties().put("textures", LGCustomSkin.WEREWOLF.getProperty()); for (Entry<LGPlayer, List<LGPlayer>> entry : vote.getVotes().entrySet())
} if (entry.getValue().size() > max) {
}*/ equal = false;
@EventHandler max = entry.getValue().size();
public void onGameEnd(LGGameEndEvent e) { choosen = entry.getKey();
if(e.getGame() == getGame() && e.getWinType() == LGWinType.VAMPIRE) } else if (entry.getValue().size() == max)
for(LGPlayer lgp : getGame().getInGame()) equal = true;
if(lgp.getRoleWinType() == RoleWinType.VAMPIRE)//Changed to wintype if (equal) {
e.getWinners().add(lgp); choosen = null;
} ArrayList<LGPlayer> choosable = new ArrayList<>();
for (Entry<LGPlayer, List<LGPlayer>> entry : vote.getVotes().entrySet())
if (entry.getValue().size() == max && entry.getKey().getRoleType() != RoleType.VAMPIRE)
choosable.add(entry.getKey());
if (choosable.size() > 0)
choosen = choosable.get(getGame().getRandom().nextInt(choosable.size()));
}
}
}
if (choosen != null) {
if (choosen.getRoleType() == RoleType.LOUP_GAROU || choosen.getRoleType() == RoleType.VAMPIRE) {
for (LGPlayer player : getPlayers())
player.sendMessage("§cVotre cible est immunisée.");
return;
} else if (choosen.getRole() instanceof RChasseurDeVampire) {
for (LGPlayer player : getPlayers())
player.sendMessage("§cVotre cible est immunisée.");
getGame().kill(getPlayers().get(getPlayers().size() - 1), Reason.CHASSEUR_DE_VAMPIRE);
return;
}
@EventHandler(priority = EventPriority.LOWEST) LGVampiredEvent event = new LGVampiredEvent(getGame(), choosen);
public void onUpdatePrefix (LGUpdatePrefixEvent e) { Bukkit.getPluginManager().callEvent(event);
if(e.getGame() == getGame()) if (event.isImmuned()) {
if(getPlayers().contains(e.getTo()) && getPlayers().contains(e.getPlayer())) for (LGPlayer player : getPlayers())
e.setPrefix(e.getPrefix()+"§5"); player.sendMessage("§cVotre cible est immunisée.");
} return;
} else if (event.isProtect()) {
for (LGPlayer player : getPlayers())
player.sendMessage("§cVotre cible est protégée.");
return;
}
for (LGPlayer player : getPlayers())
player.sendMessage("§7§l" + choosen.getName() + " s'est transformé en §5§lVampire§6.");
choosen.sendMessage("§6Tu as été infecté par les §5§lVampires §6pendant la nuit. Tu as perdu tes pouvoirs.");
choosen.sendMessage("§6§oTu gagnes désormais avec les §5§l§oVampires§6§o.");
choosen.getCache().set("vampire", true);
choosen.getCache().set("just_vampire", true);
nextCanInfect = getGame().getNight() + 1;
join(choosen, false);
LGCustomItems.updateItem(choosen);
} else
for (LGPlayer player : getPlayers())
player.sendMessage("§6Personne n'a été infecté.");
}
@EventHandler @EventHandler(priority = EventPriority.HIGHEST)
public void onCustomItemChange(LGCustomItemChangeEvent e) { public void onDayStart(LGNightEndEvent e) {
if(e.getGame() == getGame()) if (e.getGame() == getGame())
if(e.getPlayer().getCache().getBoolean("vampire")) for (LGPlayer player : getGame().getAlive()) {
e.getConstraints().add(LGCustomItemsConstraints.VAMPIRE_INFECTE.getName()); if (player.getCache().getBoolean("just_vampire")) {
} player.getCache().remove("just_vampire");
for (LGPlayer lgp : getGame().getInGame()) {
if (lgp.getRoleType() == RoleType.VAMPIRE)
lgp.sendMessage("§7§l" + player.getName() + "§6 s'est transformé en §5§lVampire§6...");
else
lgp.sendMessage("§6Quelqu'un s'est transformé en §5§lVampire§6...");
}
if (getGame().checkEndGame())
e.setCancelled(true);
}
}
}
/* @EventHandler(priority = EventPriority.HIGHEST)
public void onSkinChange(LGSkinLoadEvent e) {
if(e.getGame() == getGame())
if(getPlayers().contains(e.getPlayer()) && getPlayers().contains(e.getTo()) && showSkins) {
e.getProfile().getProperties().removeAll("textures");
e.getProfile().getProperties().put("textures", LGCustomSkin.WEREWOLF.getProperty());
}
}*/
@EventHandler
public void onGameEnd(LGGameEndEvent e) {
if (e.getGame() == getGame() && e.getWinType() == LGWinType.VAMPIRE)
for (LGPlayer lgp : getGame().getInGame())
if (lgp.getRoleWinType() == RoleWinType.VAMPIRE)//Changed to wintype
e.getWinners().add(lgp);
}
@EventHandler(priority = EventPriority.LOWEST)
public void onUpdatePrefix(LGUpdatePrefixEvent e) {
if (e.getGame() == getGame())
if (getPlayers().contains(e.getTo()) && getPlayers().contains(e.getPlayer()))
e.setPrefix(e.getPrefix() + "§5");
}
@EventHandler
public void onCustomItemChange(LGCustomItemChangeEvent e) {
if (e.getGame() == getGame())
if (e.getPlayer().getCache().getBoolean("vampire"))
e.getConstraints().add(LGCustomItemsConstraints.VAMPIRE_INFECTE.getName());
}
} }

View file

@ -2,44 +2,53 @@ package fr.leomelki.loupgarou.roles;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
public class RVillageois extends Role{ public class RVillageois extends Role {
public RVillageois(LGGame game) { public RVillageois(LGGame game) {
super(game); super(game);
} }
@Override
public RoleType getType() { @Override
return RoleType.VILLAGER; public RoleType getType() {
} return RoleType.VILLAGER;
@Override }
public RoleWinType getWinType() {
return RoleWinType.VILLAGE; @Override
} public RoleWinType getWinType() {
@Override return RoleWinType.VILLAGE;
public String getName() { }
return "§a§lVillageois";
} @Override
@Override public String getName() {
public String getFriendlyName() { return "§a§lVillageois";
return "des "+getName(); }
}
@Override @Override
public String getShortDescription() { public String getFriendlyName() {
return "Tu gagnes avec le §a§lVillage"; return "des " + getName();
} }
@Override
public String getDescription() { @Override
return "Tu gagnes avec le §a§lVillage§f. Tu ne disposes d'aucun pouvoir particulier, uniquement ta perspicacité et ta force de persuasion."; public String getShortDescription() {
} return "Tu gagnes avec le §a§lVillage";
@Override }
public String getTask() {
return ""; @Override
} public String getDescription() {
@Override return "Tu gagnes avec le §a§lVillage§f. Tu ne disposes d'aucun pouvoir particulier, uniquement ta perspicacité et ta force de persuasion.";
public String getBroadcastedTask() { }
return "";
} @Override
@Override public String getTask() {
public int getTimeout() { return "";
return -1; }
}
@Override
public String getBroadcastedTask() {
return "";
}
@Override
public int getTimeout() {
return -1;
}
} }

View file

@ -3,68 +3,77 @@ package fr.leomelki.loupgarou.roles;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
public class RVoyante extends Role{ public class RVoyante extends Role {
public RVoyante(LGGame game) { public RVoyante(LGGame game) {
super(game); super(game);
} }
@Override
public RoleType getType() {
return RoleType.VILLAGER;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.VILLAGE;
}
@Override
public String getName() {
return "§a§lVoyante";
}
@Override
public String getFriendlyName() {
return "de la "+getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes avec le §a§lVillage";
}
@Override @Override
public String getDescription() { public RoleType getType() {
return "Tu gagnes avec le §a§lVillage§f. Chaque nuit, tu peux espionner un joueur et découvrir sa véritable identité..."; return RoleType.VILLAGER;
} }
@Override
public String getTask() {
return "Choisis un joueur dont tu veux connnaître l'identité.";
}
@Override
public String getBroadcastedTask() {
return "La "+getName()+"§9 s'apprête à sonder un joueur...";
}
@Override
public int getTimeout() {
return 15;
}
@Override @Override
protected void onNightTurn(LGPlayer player, Runnable callback) { public RoleWinType getWinType() {
player.showView(); return RoleWinType.VILLAGE;
}
player.choose(choosen -> { @Override
if(choosen != null && choosen != player) { public String getName() {
//player.sendTitle("§6Vous avez regardé un rôle", "§e§l"+choosen.getName()+"§6§l est §e§l"+choosen.getRole().getName(), 5*20); return "§a§lVoyante";
player.sendActionBarMessage("§e§l"+choosen.getName()+"§6 est §e§l"+choosen.getRole().getName()); }
player.sendMessage("§6Tu découvres que §7§l"+choosen.getName()+"§6 est "+choosen.getRole().getName()+"§6.");
player.stopChoosing(); @Override
player.hideView(); public String getFriendlyName() {
callback.run(); return "de la " + getName();
} }
});
} @Override
@Override public String getShortDescription() {
protected void onNightTurnTimeout(LGPlayer player) { return "Tu gagnes avec le §a§lVillage";
player.stopChoosing(); }
player.hideView();
//player.sendTitle("§cVous n'avez regardé aucun rôle", "§4Vous avez mis trop de temps à vous décider...", 80); @Override
//player.sendMessage("§cVous n'avez pas utilisé votre pouvoir cette nuit."); public String getDescription() {
} return "Tu gagnes avec le §a§lVillage§f. Chaque nuit, tu peux espionner un joueur et découvrir sa véritable identité...";
}
@Override
public String getTask() {
return "Choisis un joueur dont tu veux connnaître l'identité.";
}
@Override
public String getBroadcastedTask() {
return "La " + getName() + "§9 s'apprête à sonder un joueur...";
}
@Override
public int getTimeout() {
return 15;
}
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
player.showView();
player.choose(choosen -> {
if (choosen != null && choosen != player) {
//player.sendTitle("§6Vous avez regardé un rôle", "§e§l"+choosen.getName()+"§6§l est §e§l"+choosen.getRole().getName(), 5*20);
player.sendActionBarMessage("§e§l" + choosen.getName() + "§6 est §e§l" + choosen.getRole().getName());
player.sendMessage("§6Tu découvres que §7§l" + choosen.getName() + "§6 est " + choosen.getRole().getName() + "§6.");
player.stopChoosing();
player.hideView();
callback.run();
}
});
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.stopChoosing();
player.hideView();
//player.sendTitle("§cVous n'avez regardé aucun rôle", "§4Vous avez mis trop de temps à vous décider...", 80);
//player.sendMessage("§cVous n'avez pas utilisé votre pouvoir cette nuit.");
}
} }

View file

@ -1,123 +1,150 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
import java.util.ArrayList;
import java.util.concurrent.ThreadLocalRandom;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.event.Listener;
import org.bukkit.scheduler.BukkitRunnable;
import fr.leomelki.loupgarou.MainLg; import fr.leomelki.loupgarou.MainLg;
import fr.leomelki.loupgarou.classes.LGCustomItems; import fr.leomelki.loupgarou.classes.LGCustomItems;
import fr.leomelki.loupgarou.classes.LGGame; import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer; import fr.leomelki.loupgarou.classes.LGPlayer;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.event.Listener;
import org.bukkit.scheduler.BukkitRunnable;
public abstract class Role implements Listener{ import java.util.ArrayList;
@Getter @Setter private int waitedPlayers; import java.util.concurrent.ThreadLocalRandom;
@Getter private final ArrayList<LGPlayer> players = new ArrayList<>();
@Getter private final LGGame game;
public Role(LGGame game) { public abstract class Role implements Listener {
this.game = game; @Getter
Bukkit.getPluginManager().registerEvents(this, MainLg.getInstance()); private final ArrayList<LGPlayer> players = new ArrayList<>();
FileConfiguration config = MainLg.getInstance().getConfig(); @Getter
String roleConfigName = "role."+getClass().getSimpleName().substring(1); private final LGGame game;
if(config.contains(roleConfigName)) @Getter
waitedPlayers = config.getInt(roleConfigName); @Setter
} private int waitedPlayers;
public Role(LGGame game) {
this.game = game;
Bukkit.getPluginManager().registerEvents(this, MainLg.getInstance());
FileConfiguration config = MainLg.getInstance().getConfig();
String roleConfigName = "role." + getClass().getSimpleName().substring(1);
if (config.contains(roleConfigName))
waitedPlayers = config.getInt(roleConfigName);
}
public abstract String getName(); public abstract String getName();
public abstract String getFriendlyName();
public abstract String getShortDescription();
public abstract String getDescription();
public abstract String getTask();
public abstract String getBroadcastedTask();
public RoleType getType(LGPlayer lgp) {
return getType();
}
public RoleWinType getWinType(LGPlayer lgp) {
return getWinType();
}
public RoleType getType() {return null;}
public RoleWinType getWinType() {return null;}
/**
* @return Timeout in second for this role
*/
public abstract int getTimeout();
public void onNightTurn(Runnable callback) { public abstract String getFriendlyName();
ArrayList<LGPlayer> players = (ArrayList<LGPlayer>) getPlayers().clone();
new Runnable() {
@Override public abstract String getShortDescription();
public void run() {
getGame().cancelWait();
if(players.size() == 0) {
onTurnFinish(callback);
return;
}
LGPlayer player = players.remove(0);
if(player.isRoleActive()) {
getGame().wait(getTimeout(), ()->{
try {
Role.this.onNightTurnTimeout(player);
}catch(Exception err) {
System.out.println("Error when timeout role");
err.printStackTrace();
}
this.run();
}, (currentPlayer, secondsLeft)-> currentPlayer == player ? "§9§lC'est à ton tour !" : "§6C'est au tour "+getFriendlyName()+" §6(§e"+secondsLeft+" s§6)");
player.sendMessage("§6"+getTask());
// player.sendTitle("§6C'est à vous de jouer", "§a"+getTask(), 100);
onNightTurn(player, this);
} else {
getGame().wait(getTimeout(), ()->{}, (currentPlayer, secondsLeft)-> currentPlayer == player ? "§c§lTu ne peux pas jouer" : "§6C'est au tour "+getFriendlyName()+" §6(§e"+secondsLeft+" s§6)");
Runnable run = this;
new BukkitRunnable() {
@Override public abstract String getDescription();
public void run() {
run.run(); public abstract String getTask();
}
}.runTaskLater(MainLg.getInstance(), 20*(ThreadLocalRandom.current().nextInt(getTimeout()/3*2-4)+4)); public abstract String getBroadcastedTask();
}
} public RoleType getType(LGPlayer lgp) {
}.run(); return getType();
} }
public void join(LGPlayer player, boolean sendMessage) {
System.out.println(player.getName()+" est "+getName()); public RoleWinType getWinType(LGPlayer lgp) {
players.add(player); return getWinType();
if(player.getRole() == null) }
player.setRole(this);
waitedPlayers--; public RoleType getType() {
if(sendMessage) { return null;
player.sendTitle("§6Tu es "+getName(), "§e"+getShortDescription(), 200); }
player.sendMessage("§6Tu es "+getName()+"§6.");
player.sendMessage("§6Description : §f"+getDescription()); public RoleWinType getWinType() {
} return null;
} }
public void join(LGPlayer player) {
join(player, !getGame().isStarted()); /**
LGCustomItems.updateItem(player); * @return Timeout in second for this role
} */
public boolean hasPlayersLeft() { public abstract int getTimeout();
return getPlayers().size() > 0;
} public void onNightTurn(Runnable callback) {
protected void onNightTurnTimeout(LGPlayer player) {} ArrayList<LGPlayer> players = (ArrayList<LGPlayer>) getPlayers().clone();
protected void onNightTurn(LGPlayer player, Runnable callback) {} new Runnable() {
protected void onTurnFinish(Runnable callback) {
callback.run(); @Override
} public void run() {
public int getTurnOrder() { getGame().cancelWait();
try { if (players.size() == 0) {
RoleSort role = RoleSort.valueOf(getClass().getSimpleName().substring(1)); onTurnFinish(callback);
return role == null ? -1 : role.ordinal(); return;
}catch(Throwable e) { }
return -1; LGPlayer player = players.remove(0);
} if (player.isRoleActive()) {
}//En combientième ce rôle doit être appellé getGame().wait(getTimeout(), () -> {
try {
Role.this.onNightTurnTimeout(player);
} catch (Exception err) {
System.out.println("Error when timeout role");
err.printStackTrace();
}
this.run();
}, (currentPlayer, secondsLeft) -> currentPlayer == player ? "§9§lC'est à ton tour !" : "§6C'est au tour " + getFriendlyName() + " §6(§e" + secondsLeft + " s§6)");
player.sendMessage("§6" + getTask());
// player.sendTitle("§6C'est à vous de jouer", "§a"+getTask(), 100);
onNightTurn(player, this);
} else {
getGame().wait(getTimeout(), () -> {
}, (currentPlayer, secondsLeft) -> currentPlayer == player ? "§c§lTu ne peux pas jouer" : "§6C'est au tour " + getFriendlyName() + " §6(§e" + secondsLeft + " s§6)");
Runnable run = this;
new BukkitRunnable() {
@Override
public void run() {
run.run();
}
}.runTaskLater(MainLg.getInstance(), 20 * (ThreadLocalRandom.current().nextInt(getTimeout() / 3 * 2 - 4) + 4));
}
}
}.run();
}
public void join(LGPlayer player, boolean sendMessage) {
System.out.println(player.getName() + " est " + getName());
players.add(player);
if (player.getRole() == null)
player.setRole(this);
waitedPlayers--;
if (sendMessage) {
player.sendTitle("§6Tu es " + getName(), "§e" + getShortDescription(), 200);
player.sendMessage("§6Tu es " + getName() + "§6.");
player.sendMessage("§6Description : §f" + getDescription());
}
}
public void join(LGPlayer player) {
join(player, !getGame().isStarted());
LGCustomItems.updateItem(player);
}
public boolean hasPlayersLeft() {
return getPlayers().size() > 0;
}
protected void onNightTurnTimeout(LGPlayer player) {
}
protected void onNightTurn(LGPlayer player, Runnable callback) {
}
protected void onTurnFinish(Runnable callback) {
callback.run();
}
public int getTurnOrder() {
try {
RoleSort role = RoleSort.valueOf(getClass().getSimpleName().substring(1));
return role == null ? -1 : role.ordinal();
} catch (Throwable e) {
return -1;
}
}//En combientième ce rôle doit être appellé
} }

View file

@ -1,25 +1,25 @@
package fr.leomelki.loupgarou.roles; package fr.leomelki.loupgarou.roles;
public enum RoleSort { public enum RoleSort {
ChienLoup, ChienLoup,
EnfantSauvage, EnfantSauvage,
Cupidon, Cupidon,
Garde, Garde,
Survivant, Survivant,
Voyante, Voyante,
Detective, Detective,
Dictateur, Dictateur,
Pretre, Pretre,
LoupGarou, LoupGarou,
LoupGarouNoir, LoupGarouNoir,
GrandMechantLoup, GrandMechantLoup,
LoupGarouBlanc, LoupGarouBlanc,
Assassin, Assassin,
Pyromane, Pyromane,
ChasseurDeVampire, ChasseurDeVampire,
Vampire, Vampire,
Pirate, Pirate,
Bouffon, Bouffon,
Sorciere, Sorciere,
Corbeau Corbeau
} }

Some files were not shown because too many files have changed in this diff Show more