pintu
6 years ago
commit
db9c34c9e1
103 changed files with 15326 additions and 0 deletions
@ -0,0 +1,16 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<classpath> |
|||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> |
|||
<classpathentry kind="src" path="src"/> |
|||
<classpathentry kind="lib" path="C:/Users/pintu/Desktop/SpigotJars/FastAsyncWorldEdit-bukkit-19.04.22-57c85d0-1271-22.0.6.jar"/> |
|||
<classpathentry kind="lib" path="C:/Users/pintu/Desktop/SpigotJars/LeaderHeads.jar"/> |
|||
<classpathentry kind="lib" path="C:/Users/pintu/Desktop/SpigotJars/PlaceholderAPI-2.9.2.jar"/> |
|||
<classpathentry kind="lib" path="C:/Users/pintu/Desktop/SpigotJars/spigot-1.9.4-R0.1-SNAPSHOT-latest.jar"/> |
|||
<classpathentry kind="lib" path="C:/Users/pintu/Desktop/SpigotJars/spigot-1.8.8-R0.1-SNAPSHOT-latest.jar"/> |
|||
<classpathentry kind="lib" path="C:/Users/pintu/Desktop/SpigotJars/worldedit-bukkit-6.1.9.jar"/> |
|||
<classpathentry kind="lib" path="C:/Users/pintu/Desktop/SpigotJars/paperspigot-api-1.8.8-R0.1-20160806.221350-1.jar"/> |
|||
<classpathentry kind="lib" path="C:/Users/pintu/Desktop/SpigotJars/spigot-1.10.2-R0.1-SNAPSHOT-latest.jar"/> |
|||
<classpathentry kind="lib" path="C:/Users/pintu/Desktop/SpigotJars/spigot-1.11.2.jar"/> |
|||
<classpathentry kind="lib" path="C:/Users/pintu/Desktop/SpigotJars/spigot-1.12.2.jar"/> |
|||
<classpathentry kind="output" path="bin"/> |
|||
</classpath> |
@ -0,0 +1,17 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<projectDescription> |
|||
<name>MultiArena-TheBridge</name> |
|||
<comment></comment> |
|||
<projects> |
|||
</projects> |
|||
<buildSpec> |
|||
<buildCommand> |
|||
<name>org.eclipse.jdt.core.javabuilder</name> |
|||
<arguments> |
|||
</arguments> |
|||
</buildCommand> |
|||
</buildSpec> |
|||
<natures> |
|||
<nature>org.eclipse.jdt.core.javanature</nature> |
|||
</natures> |
|||
</projectDescription> |
@ -0,0 +1,10 @@ |
|||
eclipse.preferences.version=1 |
|||
encoding//src/cx/sfy/TheBridge/game/Game.java=UTF-8 |
|||
encoding//src/cx/sfy/TheBridge/game/GameFour.java=UTF-8 |
|||
encoding//src/cx/sfy/TheBridge/kit/Hotbar.java=UTF-8 |
|||
encoding//src/cx/sfy/TheBridge/listeners/PlayerListener.java=UTF-8 |
|||
encoding//src/cx/sfy/TheBridge/menus/AchievementsMenu.java=UTF-8 |
|||
encoding//src/cx/sfy/TheBridge/packets/PacketMain.java=UTF-8 |
|||
encoding//src/cx/sfy/TheBridge/packets/Reflection.java=UTF-8 |
|||
encoding//src/cx/sfy/TheBridge/team/TeamFour.java=UTF-8 |
|||
encoding//src/cx/sfy/TheBridge/utils/ScoreboardUtil.java=UTF-8 |
@ -0,0 +1,13 @@ |
|||
eclipse.preferences.version=1 |
|||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled |
|||
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate |
|||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 |
|||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve |
|||
org.eclipse.jdt.core.compiler.compliance=1.8 |
|||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate |
|||
org.eclipse.jdt.core.compiler.debug.localVariable=generate |
|||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate |
|||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error |
|||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error |
|||
org.eclipse.jdt.core.compiler.release=disabled |
|||
org.eclipse.jdt.core.compiler.source=1.8 |
@ -0,0 +1,2 @@ |
|||
eclipse.preferences.version=1 |
|||
org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false |
@ -0,0 +1,433 @@ |
|||
title: "&b&lArchievements - &e<player>" |
|||
archivements: "&aArchievements <arrow>" |
|||
back: "&eBack Page <back>" |
|||
next: "&eNext Page <next>" |
|||
close: |
|||
item: BARRIER |
|||
data: 0 |
|||
amount: 1 |
|||
name: "&cClose" |
|||
lore: |- |
|||
&7Click to close |
|||
&7this menu. |
|||
kills: |
|||
item: DIAMOND_SWORD |
|||
data: 0 |
|||
amount: 1 |
|||
name: "&aKill Archievements" |
|||
lore: |- |
|||
&7Archievements of kills |
|||
&7players in games. |
|||
wins: |
|||
item: DIAMOND |
|||
data: 0 |
|||
amount: 1 |
|||
name: "&aWin Archievements" |
|||
lore: |- |
|||
&7Archievements of win |
|||
&7games. |
|||
goals: |
|||
item: ENDER_PORTAL_FRAME |
|||
data: 0 |
|||
amount: 1 |
|||
name: "&aGoal Archievements" |
|||
lore: |- |
|||
&7Archievements of goals |
|||
&7players in games. |
|||
blocks_placed: |
|||
item: WOOD |
|||
data: 0 |
|||
amount: 1 |
|||
name: "&aBlocks Place Archievements" |
|||
lore: |- |
|||
&7Archievements of blocks |
|||
&7placed in games. |
|||
blocks_bloken: |
|||
item: DIAMOND_PICKAXE |
|||
data: 0 |
|||
amount: 1 |
|||
name: "&aBlocks Break Archievements" |
|||
lore: |- |
|||
&7Archievements of blocks |
|||
&7broken in games. |
|||
unlocked: |
|||
item: STAINED_GLASS_PANE |
|||
data: 5 |
|||
amount: 1 |
|||
name: "&a<name>" |
|||
lore: |
|||
- "&e<description>" |
|||
- "&7" |
|||
- "&7Reward:" |
|||
- "&8+ &3<xp> TheBridge Experience" |
|||
- "&8+ &6<money> TheBridge Coins" |
|||
- "&7" |
|||
- "&7Completed: &aDONE! &7(&a<current>&7)" |
|||
- "&7" |
|||
- "&aAchievement Unlocked!" |
|||
locked: |
|||
item: STAINED_GLASS_PANE |
|||
data: 14 |
|||
amount: 1 |
|||
name: "&c<name>" |
|||
lore: |
|||
- "&e<description>" |
|||
- "&7" |
|||
- "&7Reward:" |
|||
- "&8+ &3<xp> TheBridge Experience" |
|||
- "&8+ &6<money> TheBridge Coins" |
|||
- "&7" |
|||
- "&7Completed: &a<current>&7/&a<max>" |
|||
- "&7" |
|||
- "&cAchievement Locked!" |
|||
archievements: |
|||
kills-I: |
|||
type: KILLS |
|||
name: "Killer I" |
|||
description: "Kill 50 TheBridge Players" |
|||
amount: 50 |
|||
messages: |
|||
- "&aAchievement: Killer I Completed!" |
|||
- "&7 &8+ &320 The Bridge Experience." |
|||
- "&7 &8+ &620 The Bridge Coins." |
|||
rewards: |
|||
xp: 20 |
|||
money: 20 |
|||
commands: |
|||
- "none" |
|||
wins-I: |
|||
type: WINS |
|||
name: "Winner I" |
|||
description: "Win 5 TheBridge Games" |
|||
amount: 5 |
|||
messages: |
|||
- "&aAchievement: Winner I Completed!" |
|||
- "&7 &8+ &320 The Bridge Experience." |
|||
- "&7 &8+ &620 The Bridge Coins." |
|||
rewards: |
|||
xp: 20 |
|||
money: 20 |
|||
commands: |
|||
- "none" |
|||
goals-I: |
|||
type: GOALS |
|||
name: "Scorer I" |
|||
description: "Score 50 TheBridge Goals" |
|||
amount: 50 |
|||
messages: |
|||
- "&aAchievement: Scorer I Completed!" |
|||
- "&7 &8+ &320 The Bridge Experience." |
|||
- "&7 &8+ &620 The Bridge Coins." |
|||
rewards: |
|||
xp: 20 |
|||
money: 20 |
|||
commands: |
|||
- "none" |
|||
placed-I: |
|||
type: BLOCKS_PLACED |
|||
name: "Block Placer I" |
|||
description: "Place 250 Blocks TheBridge Games" |
|||
amount: 250 |
|||
messages: |
|||
- "&aAchievement: Block Placer I Completed!" |
|||
- "&7 &8+ &320 The Bridge Experience." |
|||
- "&7 &8+ &620 The Bridge Coins." |
|||
rewards: |
|||
xp: 20 |
|||
money: 20 |
|||
commands: |
|||
- "none" |
|||
broken-I: |
|||
type: BLOCKS_BROKEN |
|||
name: "Block Breaker I" |
|||
description: "Break 50 Blocks TheBridge Games" |
|||
amount: 50 |
|||
messages: |
|||
- "&aAchievement: Block Breaker I Completed!" |
|||
- "&7 &8+ &320 The Bridge Experience." |
|||
- "&7 &8+ &620 The Bridge Coins." |
|||
rewards: |
|||
xp: 20 |
|||
money: 20 |
|||
commands: |
|||
- "none" |
|||
kills-II: |
|||
type: KILLS |
|||
name: "Killer II" |
|||
description: "Kill 100 TheBridge Players" |
|||
amount: 100 |
|||
messages: |
|||
- "&aAchievement: Killer II Completed!" |
|||
- "&7 &8+ &340 The Bridge Experience." |
|||
- "&7 &8+ &640 The Bridge Coins." |
|||
rewards: |
|||
xp: 40 |
|||
money: 40 |
|||
commands: |
|||
- "none" |
|||
wins-II: |
|||
type: WINS |
|||
name: "Winner II" |
|||
description: "Win 15 TheBridge Games" |
|||
amount: 15 |
|||
messages: |
|||
- "&aAchievement: Winner II Completed!" |
|||
- "&7 &8+ &340 The Bridge Experience." |
|||
- "&7 &8+ &640 The Bridge Coins." |
|||
rewards: |
|||
xp: 40 |
|||
money: 40 |
|||
commands: |
|||
- "none" |
|||
goals-II: |
|||
type: GOALS |
|||
name: "Scorer II" |
|||
description: "Score 100 TheBridge Goals" |
|||
amount: 100 |
|||
messages: |
|||
- "&aAchievement: Scorer II Completed!" |
|||
- "&7 &8+ &340 The Bridge Experience." |
|||
- "&7 &8+ &640 The Bridge Coins." |
|||
rewards: |
|||
xp: 40 |
|||
money: 40 |
|||
commands: |
|||
- "none" |
|||
placed-II: |
|||
type: BLOCKS_PLACED |
|||
name: "Block Placer II" |
|||
description: "Place 600 Blocks TheBridge Games" |
|||
amount: 600 |
|||
messages: |
|||
- "&aAchievement: Block Placer II Completed!" |
|||
- "&7 &8+ &340 The Bridge Experience." |
|||
- "&7 &8+ &640 The Bridge Coins." |
|||
rewards: |
|||
xp: 40 |
|||
money: 40 |
|||
commands: |
|||
- "none" |
|||
broken-II: |
|||
type: BLOCKS_BROKEN |
|||
name: "Block Breaker II" |
|||
description: "Break 100 Blocks TheBridge Games" |
|||
amount: 100 |
|||
messages: |
|||
- "&aAchievement: Block Breaker II Completed!" |
|||
- "&7 &8+ &340 The Bridge Experience." |
|||
- "&7 &8+ &640 The Bridge Coins." |
|||
rewards: |
|||
xp: 40 |
|||
money: 40 |
|||
commands: |
|||
- "none" |
|||
kills-III: |
|||
type: KILLS |
|||
name: "Killer III" |
|||
description: "Kill 150 TheBridge Players" |
|||
amount: 150 |
|||
messages: |
|||
- "&aAchievement: Killer III Completed!" |
|||
- "&7 &8+ &360 The Bridge Experience." |
|||
- "&7 &8+ &660 The Bridge Coins." |
|||
rewards: |
|||
xp: 60 |
|||
money: 60 |
|||
commands: |
|||
- "none" |
|||
wins-III: |
|||
type: WINS |
|||
name: "Winner III" |
|||
description: "Win 50 TheBridge Games" |
|||
amount: 50 |
|||
messages: |
|||
- "&aAchievement: Winner III Completed!" |
|||
- "&7 &8+ &360 The Bridge Experience." |
|||
- "&7 &8+ &660 The Bridge Coins." |
|||
rewards: |
|||
xp: 60 |
|||
money: 60 |
|||
commands: |
|||
- "none" |
|||
goals-III: |
|||
type: GOALS |
|||
name: "Scorer III" |
|||
description: "Score 150 TheBridge Goals" |
|||
amount: 150 |
|||
messages: |
|||
- "&aAchievement: Scorer III Completed!" |
|||
- "&7 &8+ &360 The Bridge Experience." |
|||
- "&7 &8+ &660 The Bridge Coins." |
|||
rewards: |
|||
xp: 60 |
|||
money: 60 |
|||
commands: |
|||
- "none" |
|||
placed-III: |
|||
type: BLOCKS_PLACED |
|||
name: "Block Placer III" |
|||
description: "Place 1500 Blocks TheBridge Games" |
|||
amount: 1500 |
|||
messages: |
|||
- "&aAchievement: Block Placer III Completed!" |
|||
- "&7 &8+ &360 The Bridge Experience." |
|||
- "&7 &8+ &660 The Bridge Coins." |
|||
rewards: |
|||
xp: 60 |
|||
money: 60 |
|||
commands: |
|||
- "none" |
|||
broken-III: |
|||
type: BLOCKS_BROKEN |
|||
name: "Block Breaker III" |
|||
description: "Break 150 Blocks TheBridge Games" |
|||
amount: 150 |
|||
messages: |
|||
- "&aAchievement: Block Breaker III Completed!" |
|||
- "&7 &8+ &360 The Bridge Experience." |
|||
- "&7 &8+ &660 The Bridge Coins." |
|||
rewards: |
|||
xp: 60 |
|||
money: 60 |
|||
commands: |
|||
- "none" |
|||
kills-IV: |
|||
type: KILLS |
|||
name: "Killer IV" |
|||
description: "Kill 200 TheBridge Players" |
|||
amount: 200 |
|||
messages: |
|||
- "&aAchievement: Killer IV Completed!" |
|||
- "&7 &8+ &380 The Bridge Experience." |
|||
- "&7 &8+ &680 The Bridge Coins." |
|||
rewards: |
|||
xp: 80 |
|||
money: 80 |
|||
commands: |
|||
- "none" |
|||
wins-IV: |
|||
type: WINS |
|||
name: "Winner IV" |
|||
description: "Win 200 TheBridge Games" |
|||
amount: 200 |
|||
messages: |
|||
- "&aAchievement: Winner IV Completed!" |
|||
- "&7 &8+ &380 The Bridge Experience." |
|||
- "&7 &8+ &680 The Bridge Coins." |
|||
rewards: |
|||
xp: 80 |
|||
money: 80 |
|||
commands: |
|||
- "none" |
|||
goals-IV: |
|||
type: GOALS |
|||
name: "Scorer IV" |
|||
description: "Score 200 TheBridge Goals" |
|||
amount: 200 |
|||
messages: |
|||
- "&aAchievement: Scorer IV Completed!" |
|||
- "&7 &8+ &380 The Bridge Experience." |
|||
- "&7 &8+ &680 The Bridge Coins." |
|||
rewards: |
|||
xp: 80 |
|||
money: 80 |
|||
commands: |
|||
- "none" |
|||
placed-IV: |
|||
type: BLOCKS_PLACED |
|||
name: "Block Placer IV" |
|||
description: "Place 3000 Blocks TheBridge Games" |
|||
amount: 3000 |
|||
messages: |
|||
- "&aAchievement: Block Placer IV Completed!" |
|||
- "&7 &8+ &380 The Bridge Experience." |
|||
- "&7 &8+ &680 The Bridge Coins." |
|||
rewards: |
|||
xp: 80 |
|||
money: 80 |
|||
commands: |
|||
- "none" |
|||
broken-IV: |
|||
type: BLOCKS_BROKEN |
|||
name: "Block Breaker IV" |
|||
description: "Break 200 Blocks TheBridge Games" |
|||
amount: 200 |
|||
messages: |
|||
- "&aAchievement: Block Breaker IV Completed!" |
|||
- "&7 &8+ &380 The Bridge Experience." |
|||
- "&7 &8+ &680 The Bridge Coins." |
|||
rewards: |
|||
xp: 80 |
|||
money: 80 |
|||
commands: |
|||
- "none" |
|||
kills-V: |
|||
type: KILLS |
|||
name: "Killer V" |
|||
description: "Kill 250 TheBridge Players" |
|||
amount: 250 |
|||
messages: |
|||
- "&aAchievement: Killer V Completed!" |
|||
- "&7 &8+ &3100 The Bridge Experience." |
|||
- "&7 &8+ &6100 The Bridge Coins." |
|||
rewards: |
|||
xp: 100 |
|||
money: 100 |
|||
commands: |
|||
- "none" |
|||
wins-V: |
|||
type: WINS |
|||
name: "Winner V" |
|||
description: "Win 250 TheBridge Games" |
|||
amount: 250 |
|||
messages: |
|||
- "&aAchievement: Winner V Completed!" |
|||
- "&7 &8+ &3100 The Bridge Experience." |
|||
- "&7 &8+ &6100 The Bridge Coins." |
|||
rewards: |
|||
xp: 100 |
|||
money: 100 |
|||
commands: |
|||
- "none" |
|||
goals-IV: |
|||
type: GOALS |
|||
name: "Scorer V" |
|||
description: "Score 250 TheBridge Goals" |
|||
amount: 250 |
|||
messages: |
|||
- "&aAchievement: Scorer V Completed!" |
|||
- "&7 &8+ &3100 The Bridge Experience." |
|||
- "&7 &8+ &6100 The Bridge Coins." |
|||
rewards: |
|||
xp: 100 |
|||
money: 100 |
|||
commands: |
|||
- "none" |
|||
placed-V: |
|||
type: BLOCKS_PLACED |
|||
name: "Block Placer V" |
|||
description: "Place 5000 Blocks TheBridge Games" |
|||
amount: 5000 |
|||
messages: |
|||
- "&aAchievement: Block Placer V Completed!" |
|||
- "&7 &8+ &3100 The Bridge Experience." |
|||
- "&7 &8+ &6100 The Bridge Coins." |
|||
rewards: |
|||
xp: 100 |
|||
money: 100 |
|||
commands: |
|||
- "none" |
|||
broken-V: |
|||
type: BLOCKS_BROKEN |
|||
name: "Block Breaker V" |
|||
description: "Break 250 Blocks TheBridge Games" |
|||
amount: 250 |
|||
messages: |
|||
- "&aAchievement: Block Breaker V Completed!" |
|||
- "&7 &8+ &3100 The Bridge Experience." |
|||
- "&7 &8+ &6100 The Bridge Coins." |
|||
rewards: |
|||
xp: 100 |
|||
money: 100 |
|||
commands: |
|||
- "none" |
@ -0,0 +1 @@ |
|||
/cx/ |
@ -0,0 +1,37 @@ |
|||
size: 36 |
|||
title: "&aThe Bridge - Cages" |
|||
unlocked: |
|||
- "<description>" |
|||
- "&7" |
|||
- "&eClick to select!" |
|||
noPerm: |
|||
- "<description>" |
|||
- "&7" |
|||
- "&aPrice: &6<price>" |
|||
- "&7" |
|||
- "&cYou dont have permission!" |
|||
locked: |
|||
- "<description>" |
|||
- "&7" |
|||
- "&aPrice: &6<price>" |
|||
- "&7" |
|||
- "&eClick to buy this!" |
|||
cages: |
|||
default: |
|||
icon: GLASS |
|||
data: 0 |
|||
amount: 1 |
|||
slot: 0 |
|||
price: 0 |
|||
isBuy: true |
|||
name: "Default Glass" |
|||
clearFile: "clear.schematic" |
|||
files: |
|||
red: "normal-red.schematic" |
|||
blue: "normal-blue.schematic" |
|||
yellow: "normal-yellow.schematic" |
|||
green: "normal-green.schematic" |
|||
permission: bridges.cage.default |
|||
description: |
|||
- "&fDefault glass to all" |
|||
- "&fplayers" |
Binary file not shown.
@ -0,0 +1,132 @@ |
|||
mainLobby: null |
|||
server: ServerName |
|||
update: true |
|||
cages: false |
|||
permFormat: pex user <name> add <permission> |
|||
defaultCage: "default" |
|||
chat: |
|||
enabled: true |
|||
lobby: "&b[TheBridge] &e<player>: &7<msg>" |
|||
ingame: "<teamColor>[<teamName>] <player>: &7<msg>" |
|||
global: "&6[GLOBAL] <teamColor> <teamName> <player>: &7<msg>" |
|||
archievements: |
|||
disable: false |
|||
remove: |
|||
absorption: false |
|||
regeneration: false |
|||
bow: |
|||
seconds: 3 |
|||
shop: |
|||
size: 27 |
|||
glass: |
|||
slot: 4 |
|||
icon: STAINED_GLASS |
|||
data: 0 |
|||
amount: 1 |
|||
close: |
|||
slot: 22 |
|||
icon: BARRIER |
|||
data: 0 |
|||
amount: 1 |
|||
coins: |
|||
normal: |
|||
kill: 2 |
|||
win: 50 |
|||
goals: 0 |
|||
four: |
|||
kill: 2 |
|||
win: 50 |
|||
goals: 0 |
|||
xp: |
|||
normal: |
|||
kill: 1 |
|||
win: 10 |
|||
goals: 0 |
|||
four: |
|||
kill: 1 |
|||
win: 10 |
|||
goals: 0 |
|||
items: |
|||
shop: |
|||
enabled: false |
|||
material: DIAMOND |
|||
data: 0 |
|||
amount: 1 |
|||
slot: 3 |
|||
nameItem: "&aThe Bridge | Shop" |
|||
loreItem: |- |
|||
&7Click to open |
|||
&7shop of the bridge. |
|||
hotbar: |
|||
enabled: false |
|||
material: CHEST |
|||
data: 0 |
|||
amount: 1 |
|||
slot: 5 |
|||
nameItem: "&aHotbar Editor" |
|||
loreItem: |- |
|||
&7Click to open |
|||
&7hotbar editor. |
|||
menu: |
|||
enabled: false |
|||
material: BOOK |
|||
data: 0 |
|||
amount: 1 |
|||
slot: 4 |
|||
nameItem: "&aGame Selector" |
|||
loreItem: |- |
|||
&7Click to open |
|||
&7menu of select games. |
|||
random: |
|||
enabled: false |
|||
material: FEATHER |
|||
data: 0 |
|||
amount: 1 |
|||
slot: 8 |
|||
nameItem: "&eRandom Join" |
|||
loreItem: |- |
|||
&7Click to random |
|||
&7join a game. |
|||
names: |
|||
red: "Red" |
|||
blue: "Blue" |
|||
yellow: "Yellow" |
|||
green: "Green" |
|||
signs: |
|||
waiting: 5 |
|||
starting: 4 |
|||
pregame: 6 |
|||
ingame: 14 |
|||
finish: 11 |
|||
restart: 15 |
|||
MySQL: |
|||
enabled: false |
|||
username: Insider |
|||
password: spigot |
|||
database: Martu |
|||
host: 127.0.0.1 |
|||
port: 3306 |
|||
stats: null |
|||
tops: |
|||
normal: |
|||
kills: null |
|||
wins: null |
|||
goals: null |
|||
four: |
|||
kills: null |
|||
wins: null |
|||
goals: null |
|||
title: |
|||
prestart: |
|||
fadein: 0 |
|||
stayin: 21 |
|||
fadeout: 0 |
|||
start: |
|||
fadein: 0 |
|||
stayin: 21 |
|||
fadeout: 0 |
|||
restart: |
|||
fadein: 0 |
|||
stayin: 21 |
|||
fadeout: 0 |
|||
kit: null |
@ -0,0 +1,3 @@ |
|||
killsounds: |
|||
default: |
|||
|
@ -0,0 +1,396 @@ |
|||
prefix: "&6&lTheBridge &7:" |
|||
error: "&c&lERROR!" |
|||
signs: |
|||
normal: |
|||
line-1: "&lTheBridge Normal" |
|||
line-2: <state> |
|||
line-3: "Map: <name>" |
|||
line-4: "&7<players>/<max>" |
|||
four: |
|||
line-1: "&lTheBridge Four" |
|||
line-2: <state> |
|||
line-3: "Map: <name>" |
|||
line-4: "&7<players>/<max>" |
|||
states: |
|||
waiting: "&aWaiting..." |
|||
starting: "&eStarting" |
|||
pregame: "&cPre-Game" |
|||
ingame: "&4In-Game" |
|||
finish: "&9Finishing" |
|||
restarting: "&5Restarting" |
|||
shop: |
|||
title: "&aThe Bridge | Shop" |
|||
glass: |
|||
nameItem: "&aCage Shop" |
|||
loreItem: |- |
|||
&7Click to open |
|||
&7the cage Shop. |
|||
close: |
|||
nameItem: "&cClose" |
|||
loreItem: |- |
|||
&7Click to close |
|||
&7this shop |
|||
holograms: |
|||
your: "Your" |
|||
portal: |
|||
you: |
|||
- "<color>&l<team> Goal" |
|||
- "&7Defend!" |
|||
enemy: |
|||
- "<color>&l<team> Goal" |
|||
- "&eJump in to score!" |
|||
tops: |
|||
normal: |
|||
kills: |
|||
- "&b&lTop TheBridge Kills" |
|||
- "&aNormal mode" |
|||
- <top> |
|||
wins: |
|||
- "&b&lTop TheBridge Winners" |
|||
- "&aNormal mode" |
|||
- <top> |
|||
goals: |
|||
- "&b&lTop TheBridge Goal scorers" |
|||
- "&aNormal mode" |
|||
- <top> |
|||
four: |
|||
kills: |
|||
- "&b&lTop TheBridge Kills" |
|||
- "&aFour mode" |
|||
- <top> |
|||
wins: |
|||
- "&b&lTop TheBridge Winners" |
|||
- "&aFour mode" |
|||
- <top> |
|||
goals: |
|||
- "&b&lTop TheBridge Goal scorers" |
|||
- "&aFour mode" |
|||
- <top> |
|||
stats: |
|||
- "&a%player_name% &6&lThe Bridge &astatistics" |
|||
- "&aNormal Kills: &6%bridges_normal_kills%" |
|||
- "&aNormal Wins: &6%bridges_normal_wins%" |
|||
- "&aNormal Goals: &6%bridges_normal_goals%" |
|||
- "&aFour Kills: &6%bridges_four_kills%" |
|||
- "&aFour Wins: &6%bridges_four_wins%" |
|||
- "&aFour Goals: &6%bridges_four_goals%" |
|||
- "&aBlocks Placed: &6%bridges_blocks_placed%" |
|||
- "&aBlocks Broken: &6%bridges_blocks_broken%" |
|||
- "&aCoins: &6%bridges_coins%" |
|||
- "&aXP: &6%bridges_xp%" |
|||
deathMessages: |
|||
void: <TDColor><death> &7was thrown into the void |
|||
damage: <TDColor><death> &7was killed |
|||
custom: <TDColor><death> &7was death |
|||
player: "&7 by <TKColor><player>&7." |
|||
none: . |
|||
messages: |
|||
noPermission: "&cYou dont have permissions to run this command." |
|||
noBreak: "&cYou can only break blocks allowed blocks." |
|||
noPlace: "&cYou are not allowed to build here." |
|||
starting: "&eThe game starts in &b<time> &e<units>." |
|||
prestart: "&eCages are opening in &b<time> &e<units>." |
|||
restart: "&eCages are reopening in &b<time> &e<units>." |
|||
alreadyGame: "&cThis player is already in a game." |
|||
noGame: "&cYou are not in any game." |
|||
join: "&7<player> &ehas joined the game &b(&e<players>&b/&e<max>&b)!" |
|||
quit: "&7<player> &ehas left the game &b(&e<players>&b/&e<max>&b)!" |
|||
eliminated: <color>&l<player> &c&lhas been eliminated. |
|||
gameFull: "&cThis game is already full." |
|||
gameAlreadyStart: "&cThis game has already started." |
|||
joinedTeam: "&eYou joined a team <team>&e." |
|||
unbalancedTeam: "&cThat team is full. Try joining another one" |
|||
noHaveKit: "&cYou haven't set up the main kit yet." |
|||
noGames: "&cThere are no free games available." |
|||
hotbarSaved: "&aYour hotbar has been saved." |
|||
noBuy: "&cYou are not allowed to buy this." |
|||
noMoney: "&cYou dont have money to do this." |
|||
buyCage: "&aYou successfuly bought the &e<cage> cage." |
|||
selectedCage: "&aYou have just selected the &e<cage>&a cage." |
|||
leftGame: "&cYou left the game." |
|||
noShoot: "&cYou can not shoot the bow yet." |
|||
archiDisabled: "&cAchievements are currently disabled." |
|||
noEnabedGlass: "&cCages are currently not enabled. Please use FastAsyncWorldEdit to enable them." |
|||
start: |
|||
- "&a&m&l---------------------------------------------" |
|||
- "&7&f&lThe Bridge" |
|||
- "&7" |
|||
- "&e&lThe only goal is to enter the portal of the" |
|||
- "&e&lAnother team in order to score a goal." |
|||
- "&e&lThe team that bequeath 5 goals first" |
|||
- "&e&lwin the game." |
|||
- "&7" |
|||
- "&a&m&l---------------------------------------------" |
|||
startFour: |
|||
- "&a&m&l---------------------------------------------" |
|||
- "&7&f&lThe Bridge" |
|||
- "&7" |
|||
- "&eCross bridges to score goals on enemy teams," |
|||
- "&egoals you steal. Each team starts with &a2<heart> (lifes)&e." |
|||
- "&eScoring &a+1<heart> &efor your computer while allowing you to" |
|||
- "ðose affected lose &c-1<heart> &eof your team." |
|||
- "&7" |
|||
- "&eWhen there are 2 teams left, you can not" |
|||
- "&eregaining lives! The last team on foot wins!" |
|||
- "&7" |
|||
- "&a&m&l---------------------------------------------" |
|||
goal: |
|||
- "&a&m&l---------------------------------------------" |
|||
- "&7" |
|||
- "&7<color>&l<player> &7(&a<health>&c<heart>&7) &ehas scored! &7(&6<goals> Gol<s>&7)" |
|||
- "&7" |
|||
- "&7<color>&l<team> GOAL!!" |
|||
- "&7&c&l<redGoals> &e&l- &9&l<blueGoals> " |
|||
- "&7" |
|||
- "&a&m&l---------------------------------------------" |
|||
stole: |
|||
- "&a&m&l---------------------------------------------" |
|||
- "&7" |
|||
- <color>&l<player> &7(&a<health>&c<heart>&7) scored &c<teamStole>&7! (&6<goals> Gol<es>&7) |
|||
- <teamOther> &7stolen <color>1<heart> &7of <teamStole>&7! |
|||
- "&7" |
|||
- <green> &8- <greenLife> |
|||
- <blue> &8- <blueLife> |
|||
- <red> &8- <redLife> |
|||
- <yellow> &8- <yellowLife> |
|||
- "&7" |
|||
- "&a&m&l---------------------------------------------" |
|||
final: |
|||
- "&a&m&l---------------------------------------------" |
|||
- "&7" |
|||
- <color>&l<player> &7(&a<health>&c<heart>&7) scored &c<teamStole>&7! (&6<goals> Gol<es>&7) |
|||
- <teamStole> &7lost &c-1<heart>&7! |
|||
- "&7" |
|||
- <green> &8- <greenLife> |
|||
- <blue> &8- <blueLife> |
|||
- <red> &8- <redLife> |
|||
- <yellow> &8- <yellowLife> |
|||
- "&7" |
|||
- "&a&m&l---------------------------------------------" |
|||
win: |
|||
- "&a&m&l---------------------------------------------" |
|||
- "&7&f&lThe Bridge" |
|||
- "&7" |
|||
- "&7<color>&l<team> WIN!" |
|||
- "&7<color>&l<player> &7(&a<health>&c<heart>&7) &ehas scored! &7(&6<goals> Gol<s>&7)" |
|||
- "&7" |
|||
- "&c&l<redGoals> &7&l- &9&l<blueGoals>" |
|||
- "&7" |
|||
- "&a&m&l---------------------------------------------" |
|||
winFour: |
|||
- "&a&m&l---------------------------------------------" |
|||
- "&7&f&lThe Bridge" |
|||
- "&7" |
|||
- <color>&l<team> WIN! |
|||
- <color>&l<player> &7(&a<health>&c<heart>&7) scored &c<teamStole>&7! (&6<goals> Gol<es>&7) |
|||
- "&7" |
|||
- <green> &8- <greenLife> |
|||
- <blue> &8- <blueLife> |
|||
- <red> &8- <redLife> |
|||
- <yellow> &8- <yellowLife> |
|||
- "&7" |
|||
- "&a&m&l---------------------------------------------" |
|||
setup: |
|||
worldCreated: "&aThe world &e<name> &ahas been created." |
|||
minSet: "&aMinimum established. At location: &e<world> - <x>, <y>, <z>, <yaw>, <pitch>&a." |
|||
maxSet: "&aMaximum established. At location: &e<world> - <x>, <y>, <z>, <yaw>, <pitch>&a." |
|||
menus: |
|||
team: |
|||
title: "&eTeam Selector" |
|||
team: |
|||
nameItem: "Team <#>" |
|||
loreItem: |
|||
- "&bPlayers:" |
|||
- "&7" |
|||
- "<teamPlayers>" |
|||
teamFour: |
|||
title: "&eTeam Four Selector" |
|||
team: |
|||
nameItem: "Team Four <#>" |
|||
loreItem: |
|||
- "&bPlayers:" |
|||
- "&7" |
|||
- "<teamPlayers>" |
|||
options: |
|||
title: "Spectator Options" |
|||
enable: "&aEnable" |
|||
disable: "&cDisable" |
|||
velocidad: |
|||
nameItem: "&aSpeed <#>" |
|||
loreItem: |- |
|||
&7Click to change your |
|||
&7speed leve <#>. |
|||
vision: |
|||
nameItem: "<type> Night Vision" |
|||
loreItem: |- |
|||
&7Click to <type> the |
|||
&7night vission. |
|||
teleport: |
|||
title: "Teleporter" |
|||
team: |
|||
nameItem: "<color>Team <team>" |
|||
loreItem: |- |
|||
&7Show the players with |
|||
&7life of team. |
|||
player: |
|||
nameItem: "&7<player>" |
|||
loreItem: |- |
|||
&7 |
|||
&eLife: &b<health> |
|||
&7 |
|||
&aClick to teleport! |
|||
save: |
|||
nameItem: "&aSave Layout" |
|||
loreItem: |- |
|||
&7Click to save |
|||
&7in to default layout |
|||
close: |
|||
nameItem: "&cClose" |
|||
loreItem: |- |
|||
&7Click to close |
|||
&7this menu. |
|||
hotbar: |
|||
title: "&8Editor Hotbar - TheBridge" |
|||
type: |
|||
title: "&aSelect Type - Menu" |
|||
normal: |
|||
nameItem: "&aGame Normal" |
|||
loreItem: |- |
|||
&7Click to select |
|||
&7normal game menu. |
|||
four: |
|||
nameItem: "&aGame Four" |
|||
loreItem: |- |
|||
&7Click to select |
|||
&7four game menu. |
|||
game: |
|||
title: "&aNormal Game Menu" |
|||
generalDesc: |- |
|||
&7 |
|||
&ePlayers: &b<players>/<max> |
|||
&eMode: &b<mode> |
|||
&eState: <state> |
|||
&e |
|||
&eClick to enter! |
|||
gameFour: |
|||
title: "&aFour Game Menu" |
|||
generalDesc: |- |
|||
&7 |
|||
&ePlayers: &b<players>/<max> |
|||
&eMode: &b<mode> |
|||
&eState: <state> |
|||
&e |
|||
&eClick to enter! |
|||
items: |
|||
leave: |
|||
nameItem: "&cLeave &7(Right Click)" |
|||
loreItem: |- |
|||
&7Click to exit and |
|||
&7finish the fun. |
|||
teams: |
|||
nameItem: "&aTeam Selector &7(Right Click)" |
|||
loreItem: |- |
|||
&7Click to select computers |
|||
&7and play with friends. |
|||
spectate: |
|||
nameItem: "&aSpect Players &7(Right Click)" |
|||
loreItem: |- |
|||
&7Click to expect the |
|||
&7players per team. |
|||
config: |
|||
nameItem: "&bSpectator settings &7(Right Click)" |
|||
loreItem: |- |
|||
&7Set up your way of seeing |
|||
&7in game. |
|||
titles: |
|||
start: |
|||
title: <time> |
|||
subtitle: <none> |
|||
prestart: |
|||
title: <none> |
|||
subtitle: "&7Open cages in &a<time><s>&7..." |
|||
restart: |
|||
title: <color><player> scored! |
|||
subtitle: "&7Open cages in &a<time><s>&7..." |
|||
goalNormal: |
|||
title: <color><player> &7scored in <teamStole>&7! |
|||
subtitle: <teamOther> &7stole <color>1<heart> &7of &c<teamStole>&7! |
|||
goalFinal: |
|||
title: <color><player> &7scored in <teamStole>&7! |
|||
subtitle: <teamStole> &c&lhas eliminated! |
|||
win: |
|||
title: <color>&l<team> WIN! |
|||
subtitle: "&c&l<redGoals> &7&l- &9&l<blueGoals>" |
|||
winFour: |
|||
title: <color>&l<team> WIN! |
|||
subtitle: <color><life> |
|||
scoreboards: |
|||
main-title: "&e&lTHE BRIDGE LOBBY" |
|||
main: |- |
|||
&f |
|||
&fName: &a<player> |
|||
&f |
|||
&fLobby: &a#1 |
|||
&f |
|||
&fOnline: &a<online>/100 |
|||
&f |
|||
&6www.servername.net |
|||
lobby-title: "&e&lTHE BRIDGE" |
|||
lobby: |- |
|||
&f |
|||
&fPlayers: &e<players>/<max> |
|||
&f |
|||
&fMode: &a<mode> |
|||
&fMap: &e<map> |
|||
&f |
|||
&fServer: &e<server> |
|||
&f |
|||
&6www.servername.net |
|||
starting-title: "&e&lTHE BRIDGE" |
|||
starting: |- |
|||
&f |
|||
&fPlayers: &e<players>/<max> |
|||
&f |
|||
&fStarting in: &e<time><s> |
|||
&f |
|||
&fMode: &a<mode> |
|||
&fMap: &e<map> |
|||
&f |
|||
&fServer: &e<server> |
|||
&f |
|||
&6www.servername.net |
|||
game-normal-title: "&e&lTHE BRIDGE" |
|||
game-normal: |- |
|||
&7<date> |
|||
&f |
|||
&cRed Color Team: &e<redGoals>&7/5 |
|||
&9Blue Color Team: &e<blueGoals>&7/5 |
|||
&f |
|||
&fKills: &e<kills> |
|||
&fGoals: &c<goals> |
|||
&f |
|||
&fMode: &e<mode> |
|||
&fMap: &e<map> |
|||
&f |
|||
&6www.servername.net |
|||
game-four-title: "&e&lTHE BRIDGE" |
|||
game-four: |- |
|||
&7<date> |
|||
&7 |
|||
<red>&7: <redLife> |
|||
<blue>&7: <blueLife> |
|||
<yellow>&7: <yellowLife> |
|||
<green>&7: <greenLife> |
|||
&7 |
|||
&fKills: &a<kills> |
|||
&fGoals: &a<goals> |
|||
&7 |
|||
&fMode: &e<mode> |
|||
&fMap: &a<map> |
|||
&f |
|||
&6mc.servername.net |
|||
units: |
|||
minutes: minutes |
|||
minute: minute |
|||
seconds: seconds |
|||
second: second |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,10 @@ |
|||
main: cx.sfy.TheBridge.Main |
|||
name: TheBridge |
|||
version: 2.3.10 |
|||
authors: [Stefatorus, Leonardo0013YT] |
|||
softdepend: [PlaceholderAPI, LeaderHeads, FastAsyncWorldEdit, WorldEdit, MultiWorld, Multiverse-Core] |
|||
commands: |
|||
bridges: |
|||
permissions: |
|||
bridges.join: |
|||
default: true |
@ -0,0 +1,3 @@ |
|||
signs: |
|||
normal: {} |
|||
four: {} |
@ -0,0 +1,13 @@ |
|||
sounds: |
|||
archievement: |
|||
reward: LEVEL_UP |
|||
game: |
|||
join: NOTE_PLING |
|||
quit: NOTE_BASS |
|||
restart: SUCCESSFUL_HIT |
|||
prestart: SUCCESSFUL_HIT |
|||
starting: SUCCESSFUL_HIT |
|||
shop: |
|||
buy: NOTE_PLING |
|||
teamFour: |
|||
death: WITHER_DEATH |
@ -0,0 +1,467 @@ |
|||
package cx.sfy.TheBridge; |
|||
|
|||
import java.io.File; |
|||
import java.io.FileInputStream; |
|||
import java.io.FileOutputStream; |
|||
import java.io.IOException; |
|||
import java.util.ArrayList; |
|||
import java.util.Arrays; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.ChatColor; |
|||
import org.bukkit.Location; |
|||
import org.bukkit.World; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.plugin.java.JavaPlugin; |
|||
import org.bukkit.scheduler.BukkitRunnable; |
|||
|
|||
import cx.sfy.TheBridge.cmds.SetupCMD; |
|||
import cx.sfy.TheBridge.controllers.WorldController; |
|||
import cx.sfy.TheBridge.database.Cosmeticbase; |
|||
import cx.sfy.TheBridge.database.Database; |
|||
import cx.sfy.TheBridge.database.PlayerStat; |
|||
import cx.sfy.TheBridge.game.Game; |
|||
import cx.sfy.TheBridge.game.GameFour; |
|||
import cx.sfy.TheBridge.game.InventoryData; |
|||
import cx.sfy.TheBridge.game.PlayerData; |
|||
import cx.sfy.TheBridge.game.Game.State; |
|||
import cx.sfy.TheBridge.game.GameFour.FState; |
|||
import cx.sfy.TheBridge.hooks.PlaceholderHook; |
|||
import cx.sfy.TheBridge.kit.Hotbar; |
|||
import cx.sfy.TheBridge.kit.Kit; |
|||
import cx.sfy.TheBridge.leaderheads.TheBridgeFourGoals; |
|||
import cx.sfy.TheBridge.leaderheads.TheBridgeFourKills; |
|||
import cx.sfy.TheBridge.leaderheads.TheBridgeFourWins; |
|||
import cx.sfy.TheBridge.leaderheads.TheBridgeNormalGoals; |
|||
import cx.sfy.TheBridge.leaderheads.TheBridgeNormalKills; |
|||
import cx.sfy.TheBridge.leaderheads.TheBridgeNormalWins; |
|||
import cx.sfy.TheBridge.listeners.PlayerListener; |
|||
import cx.sfy.TheBridge.listeners.SetupListener; |
|||
import cx.sfy.TheBridge.listeners.SpectatorListener; |
|||
import cx.sfy.TheBridge.managers.ArchiManager; |
|||
import cx.sfy.TheBridge.managers.CageManager; |
|||
import cx.sfy.TheBridge.managers.FileManager; |
|||
import cx.sfy.TheBridge.managers.GameManager; |
|||
import cx.sfy.TheBridge.managers.GlassManager; |
|||
import cx.sfy.TheBridge.managers.LocationManager; |
|||
import cx.sfy.TheBridge.managers.ScoreboardManager; |
|||
import cx.sfy.TheBridge.managers.SetupManager; |
|||
import cx.sfy.TheBridge.managers.SignManager; |
|||
import cx.sfy.TheBridge.managers.TitleManager; |
|||
import cx.sfy.TheBridge.managers.TopManager; |
|||
import cx.sfy.TheBridge.menus.AchievementsMenu; |
|||
import cx.sfy.TheBridge.menus.GameMenu; |
|||
import cx.sfy.TheBridge.menus.GlassMenu; |
|||
import cx.sfy.TheBridge.menus.ShopMenu; |
|||
import cx.sfy.TheBridge.menus.SpectOptionsMenu; |
|||
import cx.sfy.TheBridge.menus.SpectPlayerMenu; |
|||
import cx.sfy.TheBridge.menus.TeamMenu; |
|||
import cx.sfy.TheBridge.nms.GenericNMS; |
|||
import cx.sfy.TheBridge.nms.NMS; |
|||
import cx.sfy.TheBridge.packets.PacketMain; |
|||
|
|||
public class Main extends JavaPlugin { |
|||
|
|||
private static Main instance; |
|||
private PacketMain refl; |
|||
private SpectOptionsMenu som; |
|||
private SpectPlayerMenu spm; |
|||
private TeamMenu tem; |
|||
private boolean placeholder; |
|||
private TitleManager tm; |
|||
private GameManager gm; |
|||
private GameMenu gmu; |
|||
private WorldController wc; |
|||
private Settings lang; |
|||
private Settings cages; |
|||
private Settings signs; |
|||
private Settings sounds; |
|||
private Settings achievement; |
|||
private Settings killsounds; |
|||
private NMS nms; |
|||
private FileManager fm; |
|||
private SetupManager sm; |
|||
private GlassManager glm; |
|||
private LocationManager lm; |
|||
private Location mainLobby; |
|||
private Kit kit; |
|||
private Database db; |
|||
private TopManager top; |
|||
private SignManager sim; |
|||
private Hotbar hotbar; |
|||
private boolean stop; |
|||
private ScoreboardManager sb; |
|||
private ArchiManager am; |
|||
private AchievementsMenu archimenu; |
|||
private CageManager cm; |
|||
private GlassMenu glam; |
|||
private boolean isCage = false; |
|||
private boolean archiDisabled = false; |
|||
private ShopMenu shop; |
|||
private Cosmeticbase cb; |
|||
|
|||
public static Main get() { |
|||
return instance; |
|||
} |
|||
|
|||
@Override |
|||
public void onEnable() { |
|||
refl = new PacketMain(this); |
|||
instance = this; |
|||
stop = false; |
|||
getConfig().options().copyDefaults(true); |
|||
saveConfig(); |
|||
File s = new File(getDataFolder() + "/cages"); |
|||
if (!s.exists()) { |
|||
s.mkdirs(); |
|||
} |
|||
saveResources(); |
|||
lang = new Settings(this, "lang"); |
|||
signs = new Settings(this, "signs"); |
|||
cages = new Settings(this, "cages"); |
|||
sounds = new Settings(this, "sounds"); |
|||
achievement = new Settings(this, "achievement"); |
|||
//killsounds = new Settings(this, "killsounds");
|
|||
if (getServer().getPluginManager().isPluginEnabled("FastAsyncWorldEdit")) { |
|||
if (!getConfig().getBoolean("cages")) { |
|||
Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.GREEN + "You have " + ChatColor.RED + "FAWE installed." + ChatColor.GREEN + "Cage System Enabled"); |
|||
} else { |
|||
cm = new CageManager(this); |
|||
isCage = true; |
|||
} |
|||
} else { |
|||
if (getConfig().getBoolean("cages")) { |
|||
Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.RED + "You don't have " + ChatColor.YELLOW + "FAWE installed." + ChatColor.RED + "Cage System Disabled"); |
|||
isCage = false; |
|||
} |
|||
} |
|||
archiDisabled = getConfig().getBoolean("archievements.disable"); |
|||
if (getServer().getPluginManager().isPluginEnabled("PlaceholderAPI")) { |
|||
placeholder = true; |
|||
new PlaceholderHook(this).register(); |
|||
} |
|||
loadNMS(); |
|||
File a = new File(getDataFolder() + "/arenas"); |
|||
if (!a.exists()) { |
|||
a.mkdirs(); |
|||
} |
|||
File a1 = new File(getDataFolder() + "/maps"); |
|||
if (!a1.exists()) { |
|||
a1.mkdirs(); |
|||
} |
|||
db = new Database(this); |
|||
cb = new Cosmeticbase(this); |
|||
kit = new Kit(); |
|||
lm = new LocationManager(this); |
|||
fm = new FileManager(this); |
|||
wc = new WorldController(this); |
|||
tm = new TitleManager(this); |
|||
sim = new SignManager(this); |
|||
gm = new GameManager(this); |
|||
gmu = new GameMenu(this); |
|||
sm = new SetupManager(this); |
|||
glm = new GlassManager(); |
|||
top = new TopManager(this); |
|||
tem = new TeamMenu(this); |
|||
som = new SpectOptionsMenu(this); |
|||
spm = new SpectPlayerMenu(this); |
|||
hotbar = new Hotbar(this); |
|||
sb = new ScoreboardManager(this); |
|||
am = new ArchiManager(this); |
|||
archimenu = new AchievementsMenu(this); |
|||
glam = new GlassMenu(this); |
|||
shop = new ShopMenu(this); |
|||
|
|||
lm.reloadLocations(); |
|||
top.updateTops(); |
|||
if (getConfig().getString("mainLobby") == null) { |
|||
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "The main lobby hasn't been set up. Please use " + ChatColor.YELLOW + "/bridges setmainlobby"); |
|||
} else { |
|||
mainLobby = getStringLocation(getConfig().getString("mainLobby")); |
|||
} |
|||
getCommand("bridges").setExecutor(new SetupCMD(this)); |
|||
Bukkit.getServer().getPluginManager().registerEvents(new SetupListener(this), this); |
|||
Bukkit.getServer().getPluginManager().registerEvents(new PlayerListener(this), this); |
|||
Bukkit.getServer().getPluginManager().registerEvents(new SpectatorListener(this), this); |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
top.updateTops(); |
|||
} |
|||
}.runTaskTimer(this, 6000, 6000); |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
for (Game game : getGM().getGames()) { |
|||
if (game.isState(State.WAITING) || game.isState(State.STARTING) || game.isState(State.PREGAME)) { |
|||
game.updateGame(); |
|||
} |
|||
} |
|||
for (GameFour game : getGM().getGamesFour()) { |
|||
if (game.isState(FState.WAITING) || game.isState(FState.STARTING) || game.isState(FState.PREGAME)) { |
|||
game.updateGame(); |
|||
} |
|||
} |
|||
} |
|||
}.runTaskTimer(this, 20, 20); |
|||
if (getServer().getPluginManager().isPluginEnabled("LeaderHeads")) { |
|||
new TheBridgeNormalKills(); |
|||
new TheBridgeNormalWins(); |
|||
new TheBridgeNormalGoals(); |
|||
new TheBridgeFourKills(); |
|||
new TheBridgeFourWins(); |
|||
new TheBridgeFourGoals(); |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public void onDisable() { |
|||
stop = true; |
|||
getTOP().removeHolo(); |
|||
getServer().getScheduler().cancelAllTasks(); |
|||
for (InventoryData inv : InventoryData.getInventoryData().values()) { |
|||
inv.restore(); |
|||
} |
|||
for (GameFour gamef : getGM().getGamesFour()) { |
|||
for (PlayerData pd : gamef.getPD().values()) { |
|||
pd.restore(); |
|||
} |
|||
} |
|||
for (Game gamef : getGM().getGames()) { |
|||
for (PlayerData pd : gamef.getPD().values()) { |
|||
pd.restore(); |
|||
} |
|||
} |
|||
for (Player on : Bukkit.getOnlinePlayers()) { |
|||
getDB().saveData(PlayerStat.getPlayerStat(on)); |
|||
getCB().saveData(PlayerStat.getPlayerStat(on)); |
|||
} |
|||
} |
|||
|
|||
public boolean isArchiDisabled() { |
|||
return archiDisabled; |
|||
} |
|||
|
|||
public Settings getSounds() { |
|||
return sounds; |
|||
} |
|||
|
|||
public Cosmeticbase getCB() { |
|||
return cb; |
|||
} |
|||
|
|||
public boolean isCage() { |
|||
return isCage; |
|||
} |
|||
|
|||
public Settings getKS() { |
|||
return killsounds; |
|||
} |
|||
|
|||
public ShopMenu getShop() { |
|||
return shop; |
|||
} |
|||
|
|||
public GlassMenu getGLAM() { |
|||
return glam; |
|||
} |
|||
|
|||
public CageManager getCM() { |
|||
return cm; |
|||
} |
|||
|
|||
public boolean isStop() { |
|||
return stop; |
|||
} |
|||
|
|||
public AchievementsMenu getArchiMenu() { |
|||
return archimenu; |
|||
} |
|||
|
|||
public ArchiManager getAM() { |
|||
return am; |
|||
} |
|||
|
|||
public Hotbar getHotbar() { |
|||
return hotbar; |
|||
} |
|||
|
|||
public ScoreboardManager getSB() { |
|||
return sb; |
|||
} |
|||
|
|||
public SpectPlayerMenu getSPM() { |
|||
return spm; |
|||
} |
|||
|
|||
public SpectOptionsMenu getSOM() { |
|||
return som; |
|||
} |
|||
|
|||
public TeamMenu getTEM() { |
|||
return tem; |
|||
} |
|||
|
|||
public void loadNMS() { |
|||
// Replaced with reflection.
|
|||
nms = new GenericNMS(); |
|||
} |
|||
|
|||
public void saveResources() { |
|||
saveResource("clear.schematic", false); |
|||
saveResource("normal-red.schematic", false); |
|||
saveResource("normal-blue.schematic", false); |
|||
saveResource("normal-green.schematic", false); |
|||
saveResource("normal-yellow.schematic", false); |
|||
File cage = new File(getDataFolder(), "cages"); |
|||
File c = new File(getDataFolder(), "clear.schematic"); |
|||
File r = new File(getDataFolder(), "normal-red.schematic"); |
|||
File b = new File(getDataFolder(), "normal-blue.schematic"); |
|||
File g = new File(getDataFolder(), "normal-green.schematic"); |
|||
File y = new File(getDataFolder(), "normal-yellow.schematic"); |
|||
copyFiles(c, new File(cage, "clear.schematic")); |
|||
copyFiles(r, new File(cage, "normal-red.schematic")); |
|||
copyFiles(b, new File(cage, "normal-blue.schematic")); |
|||
copyFiles(g, new File(cage, "normal-green.schematic")); |
|||
copyFiles(y, new File(cage, "normal-yellow.schematic")); |
|||
c.delete(); |
|||
r.delete(); |
|||
g.delete(); |
|||
b.delete(); |
|||
y.delete(); |
|||
} |
|||
|
|||
public void copyFiles(File file, File file2) { |
|||
try { |
|||
if (!new ArrayList<String>(Arrays.asList("uid.dat", "session.dat")).contains(file.getName())) { |
|||
if (file.isDirectory()) { |
|||
if (!file2.exists()) { |
|||
file2.mkdirs(); |
|||
} |
|||
String[] list; |
|||
for (int length = (list = file.list()).length, i = 0; i < length; ++i) { |
|||
String s = list[i]; |
|||
copyFiles(new File(file, s), new File(file2, s)); |
|||
} |
|||
} |
|||
else { |
|||
FileOutputStream fileOutputStream; |
|||
try (FileInputStream fileInputStream = new FileInputStream(file)) { |
|||
fileOutputStream = new FileOutputStream(file2); |
|||
byte[] array = new byte[1024]; |
|||
int read; |
|||
while ((read = fileInputStream.read(array)) > 0) { |
|||
fileOutputStream.write(array, 0, read); |
|||
} |
|||
} |
|||
fileOutputStream.close(); |
|||
} |
|||
} |
|||
} |
|||
catch (IOException ex) {} |
|||
} |
|||
|
|||
/*public boolean isOnePointNine() { |
|||
return onepointnine; |
|||
}*/ |
|||
|
|||
public SignManager getSIM() { |
|||
return sim; |
|||
} |
|||
|
|||
public Settings getSigns() { |
|||
return signs; |
|||
} |
|||
|
|||
public TopManager getTOP() { |
|||
return top; |
|||
} |
|||
|
|||
public Kit getKit() { |
|||
return kit; |
|||
} |
|||
|
|||
public void reloadMainLobby() { |
|||
mainLobby = getStringLocation(getConfig().getString("mainLobby")); |
|||
} |
|||
|
|||
public Database getDB() { |
|||
return db; |
|||
} |
|||
|
|||
public LocationManager getLM() { |
|||
return lm; |
|||
} |
|||
|
|||
public Location getMainLobby() { |
|||
return mainLobby; |
|||
} |
|||
|
|||
public GlassManager getGLM() { |
|||
return glm; |
|||
} |
|||
|
|||
public FileManager getFM() { |
|||
return fm; |
|||
} |
|||
|
|||
public SetupManager getSM() { |
|||
return sm; |
|||
} |
|||
|
|||
public WorldController getWC() { |
|||
return wc; |
|||
} |
|||
|
|||
public NMS getNMS() { |
|||
return nms; |
|||
} |
|||
|
|||
public GameMenu getGMU() { |
|||
return gmu; |
|||
} |
|||
|
|||
public GameManager getGM() { |
|||
return gm; |
|||
} |
|||
|
|||
public TitleManager getTM() { |
|||
return tm; |
|||
} |
|||
|
|||
public Settings getAchievement() { |
|||
return achievement; |
|||
} |
|||
|
|||
public Settings getLang() { |
|||
return lang; |
|||
} |
|||
|
|||
public Settings getCages() { |
|||
return cages; |
|||
} |
|||
|
|||
public boolean getPlaceholder() { |
|||
return placeholder; |
|||
} |
|||
|
|||
public Location getStringLocation(String location) { |
|||
String[] l = location.split(";"); |
|||
World world = Bukkit.getWorld(l[0]); |
|||
double x = Double.parseDouble(l[1]); |
|||
double y = Double.parseDouble(l[2]); |
|||
double z = Double.parseDouble(l[3]); |
|||
float yaw = Float.parseFloat(l[4]); |
|||
float pitch = Float.parseFloat(l[5]); |
|||
return new Location(world, x, y, z, yaw, pitch); |
|||
} |
|||
|
|||
public PacketMain getRefl() { |
|||
return refl; |
|||
} |
|||
|
|||
public void setRefl(PacketMain refl) { |
|||
this.refl = refl; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,102 @@ |
|||
package cx.sfy.TheBridge; |
|||
|
|||
import me.clip.placeholderapi.PlaceholderAPI; |
|||
import org.bukkit.configuration.Configuration; |
|||
import org.bukkit.configuration.InvalidConfigurationException; |
|||
import org.bukkit.configuration.file.FileConfiguration; |
|||
import org.bukkit.configuration.file.YamlConfiguration; |
|||
import org.bukkit.entity.Player; |
|||
|
|||
import java.io.File; |
|||
import java.io.IOException; |
|||
import java.io.InputStreamReader; |
|||
import java.io.Reader; |
|||
import java.util.List; |
|||
|
|||
public class Settings { |
|||
|
|||
private FileConfiguration config; |
|||
private File file; |
|||
private Main u; |
|||
|
|||
public Settings(Main u, String s) { |
|||
this.u = u; |
|||
this.file = new File(this.u.getDataFolder(), s + ".yml"); |
|||
this.config = YamlConfiguration.loadConfiguration(this.file); |
|||
Reader reader = new InputStreamReader(u.getResource(String.valueOf(String.valueOf(String.valueOf(s))) + ".yml")); |
|||
YamlConfiguration loadConfiguration = YamlConfiguration.loadConfiguration(reader); |
|||
try { |
|||
if (!this.file.exists()) { |
|||
this.config.addDefaults((Configuration) loadConfiguration); |
|||
this.config.options().copyDefaults(true); |
|||
this.config.save(this.file); |
|||
} else { |
|||
this.config.addDefaults((Configuration) loadConfiguration); |
|||
this.config.options().copyDefaults(true); |
|||
this.config.save(this.file); |
|||
this.config.load(this.file); |
|||
} |
|||
} catch (IOException | InvalidConfigurationException ex) { |
|||
} |
|||
} |
|||
|
|||
protected void sDefault(String s, String s2) { |
|||
if (!this.config.contains(s)) { |
|||
this.config.set(s, (Object) s2); |
|||
this.save(); |
|||
} |
|||
} |
|||
|
|||
public void save() { |
|||
try { |
|||
this.config.save(this.file); |
|||
} catch (IOException ex) { |
|||
} |
|||
} |
|||
|
|||
public FileConfiguration getConfig() { |
|||
return this.config; |
|||
} |
|||
|
|||
protected File getFile() { |
|||
return this.file; |
|||
} |
|||
|
|||
public String get(String s) { |
|||
return this.config.getString(s).replaceAll("&", "§"); |
|||
} |
|||
|
|||
public String get(Player p, String s) { |
|||
if (u.getPlaceholder()) { |
|||
return PlaceholderAPI.setPlaceholders(p, config.getString(s).replaceAll("&", "§")); |
|||
} |
|||
return config.getString(s).replaceAll("&", "§"); |
|||
} |
|||
|
|||
public int getInt(String s) { |
|||
return this.config.getInt(s); |
|||
} |
|||
|
|||
public List<String> getList(String s) { |
|||
return (List<String>) this.config.getStringList(s); |
|||
} |
|||
|
|||
public List<String> getList(Player p, String s) { |
|||
if (u.getPlaceholder()) { |
|||
return PlaceholderAPI.setPlaceholders(p, (List<String>) config.getStringList(s)); |
|||
} |
|||
return (List<String>) config.getStringList(s); |
|||
} |
|||
|
|||
public boolean isSet(String s) { |
|||
return this.config.isSet(s); |
|||
} |
|||
|
|||
public void set(String s, Object o) { |
|||
this.config.set(s, o); |
|||
} |
|||
|
|||
public boolean getBoolean(String s) { |
|||
return this.config.getBoolean(s); |
|||
} |
|||
} |
@ -0,0 +1,120 @@ |
|||
package cx.sfy.TheBridge.archievements; |
|||
|
|||
import java.util.ArrayList; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.Sound; |
|||
import org.bukkit.entity.Player; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.database.PlayerStat; |
|||
|
|||
public class Archi { |
|||
|
|||
Main plugin; |
|||
private String name; |
|||
private String description; |
|||
private int max; |
|||
private int xp; |
|||
private int money; |
|||
private ArchiType type; |
|||
private ArrayList<String> cmds = new ArrayList<String>(); |
|||
private ArrayList<String> message = new ArrayList<String>(); |
|||
|
|||
public Archi(Main plugin, String path) { |
|||
this.plugin = plugin; |
|||
this.type = ArchiType.valueOf(plugin.getAchievement().get(path + ".type")); |
|||
this.name = plugin.getAchievement().get(path + ".name"); |
|||
this.description = plugin.getAchievement().get(path + ".description"); |
|||
this.max = plugin.getAchievement().getInt(path + ".amount"); |
|||
this.xp = plugin.getAchievement().getInt(path + ".rewards.xp"); |
|||
this.money = plugin.getAchievement().getInt(path + ".rewards.money"); |
|||
for (String d : plugin.getAchievement().getList(path + ".messages")) { |
|||
message.add(d); |
|||
} |
|||
for (String d : plugin.getAchievement().getList(path + ".commands")) { |
|||
if (!d.equals("none")) { |
|||
cmds.add(d); |
|||
} |
|||
} |
|||
} |
|||
|
|||
public void execute(Player p) { |
|||
for (String cmd : cmds) { |
|||
cmd = cmd.replace("%player%", p.getName()); |
|||
Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), cmd); |
|||
} |
|||
PlayerStat ps = PlayerStat.getPlayerStat(p); |
|||
ps.addCoins(money); |
|||
ps.addXP(xp); |
|||
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.archievement.reward")), 1.0f, 1.0f); |
|||
for (String msg : message) { |
|||
p.sendMessage(msg.replaceAll("&", "§")); |
|||
} |
|||
} |
|||
|
|||
public String getName() { |
|||
return name; |
|||
} |
|||
|
|||
public void setName(String name) { |
|||
this.name = name; |
|||
} |
|||
|
|||
public int getMax() { |
|||
return max; |
|||
} |
|||
|
|||
public void setMax(int max) { |
|||
this.max = max; |
|||
} |
|||
|
|||
public String getDescription() { |
|||
return description; |
|||
} |
|||
|
|||
public void setDescription(String description) { |
|||
this.description = description; |
|||
} |
|||
|
|||
public int getXp() { |
|||
return xp; |
|||
} |
|||
|
|||
public void setXp(int xp) { |
|||
this.xp = xp; |
|||
} |
|||
|
|||
public int getMoney() { |
|||
return money; |
|||
} |
|||
|
|||
public void setMoney(int money) { |
|||
this.money = money; |
|||
} |
|||
|
|||
public ArchiType getType() { |
|||
return type; |
|||
} |
|||
|
|||
public void setType(ArchiType type) { |
|||
this.type = type; |
|||
} |
|||
|
|||
public ArrayList<String> getCmds() { |
|||
return cmds; |
|||
} |
|||
|
|||
public void setCmds(ArrayList<String> cmds) { |
|||
this.cmds = cmds; |
|||
} |
|||
|
|||
public ArrayList<String> getMessage() { |
|||
return message; |
|||
} |
|||
|
|||
public void setMessage(ArrayList<String> message) { |
|||
this.message = message; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,11 @@ |
|||
package cx.sfy.TheBridge.archievements; |
|||
|
|||
public enum ArchiType { |
|||
|
|||
BLOCKS_BROKEN, |
|||
BLOCKS_PLACED, |
|||
KILLS, |
|||
GOALS, |
|||
WINS; |
|||
|
|||
} |
@ -0,0 +1,15 @@ |
|||
package cx.sfy.TheBridge.client; |
|||
|
|||
import org.bukkit.entity.Player; |
|||
|
|||
import io.netty.channel.ChannelHandlerContext; |
|||
import io.netty.channel.ChannelPromise; |
|||
|
|||
public class ClientPacket { |
|||
|
|||
public static boolean hidePacket(Player p, ChannelHandlerContext ctx, Object msg, ChannelPromise promise) { |
|||
return false; |
|||
|
|||
} |
|||
|
|||
} |
File diff suppressed because it is too large
@ -0,0 +1,174 @@ |
|||
package cx.sfy.TheBridge.controllers; |
|||
|
|||
import java.io.File; |
|||
import java.io.FileInputStream; |
|||
import java.io.FileOutputStream; |
|||
import java.io.IOException; |
|||
import java.io.InputStream; |
|||
import java.io.OutputStream; |
|||
import java.util.ArrayList; |
|||
import java.util.Arrays; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.ChatColor; |
|||
import org.bukkit.Difficulty; |
|||
import org.bukkit.Location; |
|||
import org.bukkit.Material; |
|||
import org.bukkit.World; |
|||
import org.bukkit.World.Environment; |
|||
import org.bukkit.WorldCreator; |
|||
import org.bukkit.entity.Player; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
|
|||
public class WorldController { |
|||
|
|||
public Main plugin; |
|||
|
|||
public WorldController(Main plugin) { |
|||
this.plugin = plugin; |
|||
} |
|||
|
|||
public void resetWorld(String name) { |
|||
unloadWorld(name); |
|||
copyWorld(new File(plugin.getDataFolder() + "/maps", name), name); |
|||
} |
|||
|
|||
protected void unloadWorld(String world) { |
|||
if (Bukkit.getWorld(world) == null) |
|||
return; |
|||
Bukkit.getServer().unloadWorld(world, false); |
|||
} |
|||
|
|||
public World createEmptyWorld(Player p, String name) { |
|||
if (Bukkit.getWorld(name) == null) { |
|||
World world = null; |
|||
final boolean loaded = loadWorld(name, Environment.NORMAL); |
|||
if (loaded) |
|||
world = Bukkit.getWorld(name); |
|||
if (world != null) { |
|||
world.getBlockAt(0, 80, 0).setType(Material.STONE); |
|||
p.teleport(new Location(world, 0, 81, 0)); |
|||
p.sendMessage(plugin.getLang().get("setup.worldCreated").replaceAll("<name>", world.getName())); |
|||
return world; |
|||
} |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
public boolean loadWorld(String worldName, World.Environment environment) { |
|||
boolean loaded = false; |
|||
if (Bukkit.getWorld(worldName) != null) { |
|||
final World world = Bukkit.getWorld(worldName); |
|||
world.setDifficulty(Difficulty.NORMAL); |
|||
world.setSpawnFlags(true, true); |
|||
world.setPVP(true); |
|||
world.setStorm(false); |
|||
world.setThundering(false); |
|||
world.setWeatherDuration(Integer.MAX_VALUE); |
|||
world.setKeepSpawnInMemory(false); |
|||
world.setTicksPerAnimalSpawns(1); |
|||
world.setTicksPerMonsterSpawns(1); |
|||
world.setAutoSave(false); |
|||
world.setGameRuleValue("doMobSpawning", "false"); |
|||
world.setGameRuleValue("mobGriefing", "false"); |
|||
world.setGameRuleValue("doFireTick", "false"); |
|||
world.setGameRuleValue("showDeathMessages", "false"); |
|||
return true; |
|||
} |
|||
final WorldCreator worldCreator = new WorldCreator(worldName); |
|||
worldCreator.environment(environment); |
|||
worldCreator.generateStructures(false); |
|||
worldCreator.generator(plugin.getNMS().getChunkGenerator()); |
|||
final World world = worldCreator.createWorld(); |
|||
world.setDifficulty(Difficulty.NORMAL); |
|||
world.setSpawnFlags(true, true); |
|||
world.setPVP(true); |
|||
world.setStorm(false); |
|||
world.setThundering(false); |
|||
world.setWeatherDuration(Integer.MAX_VALUE); |
|||
world.setKeepSpawnInMemory(false); |
|||
world.setTicksPerAnimalSpawns(1); |
|||
world.setTicksPerMonsterSpawns(1); |
|||
world.setAutoSave(false); |
|||
world.setGameRuleValue("doMobSpawning", "false"); |
|||
world.setGameRuleValue("mobGriefing", "false"); |
|||
world.setGameRuleValue("doFireTick", "false"); |
|||
world.setGameRuleValue("showDeathMessages", "false"); |
|||
world.getBlockAt(0, 75, 0).setType(Material.STONE); |
|||
for(final World w : plugin.getServer().getWorlds()) |
|||
if(w.getName().equals(world.getName())) { |
|||
loaded = true; |
|||
break; |
|||
} |
|||
return loaded; |
|||
} |
|||
|
|||
public void copyWorld(World world) { |
|||
copyFileStructure(world.getWorldFolder(), new File(plugin.getDataFolder() + "/maps/" + world.getName())); |
|||
} |
|||
|
|||
protected void copyWorld(File originalWorld, String newWorldName) { |
|||
copyFileStructure(originalWorld, new File(Bukkit.getWorldContainer(), newWorldName)); |
|||
final WorldCreator worldc = new WorldCreator(newWorldName); |
|||
worldc.generateStructures(false); |
|||
worldc.generator(plugin.getNMS().getChunkGenerator()); |
|||
worldc.createWorld(); |
|||
final World world = Bukkit.getWorld(newWorldName); |
|||
world.setTime(500); |
|||
world.setMonsterSpawnLimit(0); |
|||
world.setWeatherDuration(0); |
|||
world.setAnimalSpawnLimit(0); |
|||
world.setAmbientSpawnLimit(0); |
|||
world.setGameRuleValue("doDaylightCycle", "false"); |
|||
Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.GREEN + "Se ha reiniciado el mapa " + ChatColor.YELLOW + newWorldName + ChatColor.GREEN + "."); |
|||
} |
|||
|
|||
protected void copyFileStructure(File source, File target) { |
|||
try { |
|||
final ArrayList<String> ignore = new ArrayList<>(Arrays.asList("uid.dat", "session.lock")); |
|||
if (!ignore.contains(source.getName())) |
|||
if (source.isDirectory()) { |
|||
if (!target.exists()) |
|||
if (!target.mkdirs()) |
|||
throw new IOException("Couldn't create world directory!"); |
|||
final String files[] = source.list(); |
|||
for (final String file : files) { |
|||
final File srcFile = new File(source, file); |
|||
final File destFile = new File(target, file); |
|||
copyFileStructure(srcFile, destFile); |
|||
} |
|||
} else { |
|||
final InputStream in = new FileInputStream(source); |
|||
final OutputStream out = new FileOutputStream(target); |
|||
final byte[] buffer = new byte[1024]; |
|||
int length; |
|||
while ((length = in.read(buffer)) > 0) |
|||
out.write(buffer, 0, length); |
|||
in.close(); |
|||
out.close(); |
|||
} |
|||
} catch (final IOException e) { |
|||
throw new RuntimeException(e); |
|||
} |
|||
} |
|||
|
|||
public void deleteWorld(String name) { |
|||
unloadWorld(name); |
|||
final File target = new File (plugin.getServer().getWorldContainer().getAbsolutePath(), name); |
|||
deleteWorld(target); |
|||
} |
|||
|
|||
protected void deleteWorld(File path) { |
|||
if (path.exists()) { |
|||
final File[] files = path.listFiles(); |
|||
if (files != null) |
|||
for (final File file: files) |
|||
if(file.isDirectory()) |
|||
deleteWorld(file); |
|||
else |
|||
file.delete(); |
|||
} |
|||
} |
|||
|
|||
} |
@ -0,0 +1,159 @@ |
|||
package cx.sfy.TheBridge.cosmetics.cages; |
|||
|
|||
import java.io.File; |
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
import org.bukkit.Material; |
|||
import org.bukkit.inventory.ItemStack; |
|||
import org.bukkit.inventory.meta.ItemMeta; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
|
|||
public class Cage { |
|||
|
|||
Main plugin; |
|||
private ItemStack icon; |
|||
private String id; |
|||
private String name; |
|||
private String permission; |
|||
private ArrayList<String> lore; |
|||
private File filered; |
|||
private File fileblue; |
|||
private File fileyellow; |
|||
private File filegreen; |
|||
private File clear; |
|||
private int price; |
|||
private int slot; |
|||
private boolean isBuy; |
|||
|
|||
public Cage(Main plugin, String path, String id) { |
|||
this.plugin = plugin; |
|||
this.icon = new ItemStack(Material.valueOf(plugin.getCages().get(path + ".icon")), plugin.getCages().getInt(path + ".amount"), (short)plugin.getCages().getInt(path + ".data")); |
|||
this.lore = new ArrayList<String>(); |
|||
for (String l : plugin.getCages().getList(path + ".description")) { |
|||
lore.add(l.replaceAll("&", "§")); |
|||
} |
|||
this.filered = new File(plugin.getDataFolder(), "cages/" + plugin.getCages().get(path + ".files.red")); |
|||
this.fileblue = new File(plugin.getDataFolder(), "cages/" + plugin.getCages().get(path + ".files.blue")); |
|||
this.fileyellow = new File(plugin.getDataFolder(), "cages/" + plugin.getCages().get(path + ".files.yellow")); |
|||
this.filegreen = new File(plugin.getDataFolder(), "cages/" + plugin.getCages().get(path + ".files.green")); |
|||
this.clear = new File(plugin.getDataFolder(), "cages/" + plugin.getCages().get(path + ".clearFile")); |
|||
this.id = id; |
|||
this.name = plugin.getCages().get(path + ".name"); |
|||
this.permission = plugin.getCages().get(path + ".permission"); |
|||
this.price = plugin.getCages().getInt(path + ".price"); |
|||
this.slot = plugin.getCages().getInt(path + ".slot"); |
|||
this.isBuy = plugin.getCages().getBoolean(path + ".isBuy"); |
|||
} |
|||
|
|||
public File getClear() { |
|||
return clear; |
|||
} |
|||
|
|||
public String getPermission() { |
|||
return permission; |
|||
} |
|||
|
|||
public String getName() { |
|||
return name; |
|||
} |
|||
|
|||
public int getPrice() { |
|||
return price; |
|||
} |
|||
|
|||
public int getSlot() { |
|||
return slot; |
|||
} |
|||
|
|||
public boolean isBuy() { |
|||
return isBuy; |
|||
} |
|||
|
|||
public ItemStack getHasIcon() { |
|||
ItemStack perm = icon; |
|||
ItemMeta permM = perm.getItemMeta(); |
|||
List<String> nLore = new ArrayList<String>();; |
|||
for (String msg : plugin.getCages().getList("unlocked")) { |
|||
if (msg.contains("<description>")) { |
|||
for (String l : lore) { |
|||
nLore.add(l); |
|||
} |
|||
} else { |
|||
nLore.add(msg.replaceAll("&", "§").replaceAll("<price>", String.valueOf(price))); |
|||
} |
|||
} |
|||
permM.setLore(nLore); |
|||
permM.setDisplayName("§a" + name); |
|||
perm.setItemMeta(permM); |
|||
return perm; |
|||
} |
|||
|
|||
public ItemStack getPermIcon() { |
|||
ItemStack perm = icon; |
|||
ItemMeta permM = perm.getItemMeta(); |
|||
List<String> nLore = new ArrayList<String>();; |
|||
for (String msg : plugin.getCages().getList("noPerm")) { |
|||
if (msg.contains("<description>")) { |
|||
for (String l : lore) { |
|||
nLore.add(l); |
|||
} |
|||
} else { |
|||
nLore.add(msg.replaceAll("&", "§").replaceAll("<price>", String.valueOf(price))); |
|||
} |
|||
} |
|||
permM.setLore(nLore); |
|||
permM.setDisplayName("§c" + name); |
|||
perm.setItemMeta(permM); |
|||
return perm; |
|||
} |
|||
|
|||
public ItemStack getBuyIcon() { |
|||
ItemStack perm = icon; |
|||
ItemMeta permM = perm.getItemMeta(); |
|||
List<String> nLore = new ArrayList<String>();; |
|||
for (String msg : plugin.getCages().getList("locked")) { |
|||
if (msg.contains("<description>")) { |
|||
for (String l : lore) { |
|||
nLore.add(l); |
|||
} |
|||
} else { |
|||
nLore.add(msg.replaceAll("&", "§").replaceAll("<price>", String.valueOf(price))); |
|||
} |
|||
} |
|||
permM.setLore(nLore); |
|||
permM.setDisplayName("§c" + name); |
|||
perm.setItemMeta(permM); |
|||
return perm; |
|||
} |
|||
|
|||
public ItemStack getNormalIcon() { |
|||
return icon; |
|||
} |
|||
|
|||
public String getId() { |
|||
return id; |
|||
} |
|||
|
|||
public ArrayList<String> getLore() { |
|||
return lore; |
|||
} |
|||
|
|||
public File getFileRed() { |
|||
return filered; |
|||
} |
|||
|
|||
public File getFileBlue() { |
|||
return fileblue; |
|||
} |
|||
|
|||
public File getFileYellow() { |
|||
return fileyellow; |
|||
} |
|||
|
|||
public File getFileGreen() { |
|||
return filegreen; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,9 @@ |
|||
package cx.sfy.TheBridge.cosmetics.killsounds; |
|||
|
|||
public class KillSound { |
|||
|
|||
public KillSound() { |
|||
|
|||
} |
|||
|
|||
} |
@ -0,0 +1,255 @@ |
|||
package cx.sfy.TheBridge.database; |
|||
|
|||
import java.io.File; |
|||
import java.io.IOException; |
|||
import java.sql.Connection; |
|||
import java.sql.DriverManager; |
|||
import java.sql.PreparedStatement; |
|||
import java.sql.ResultSet; |
|||
import java.sql.SQLException; |
|||
import java.sql.Statement; |
|||
import java.util.TimeZone; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.ChatColor; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.scheduler.BukkitRunnable; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
|
|||
public class Cosmeticbase { |
|||
|
|||
public Main plugin; |
|||
private Connection connection; |
|||
|
|||
public Cosmeticbase(Main plugin) { |
|||
this.plugin = plugin; |
|||
conectar(); |
|||
} |
|||
|
|||
public void conectar() { |
|||
if (plugin.getConfig().getBoolean("MySQL.enabled")){ |
|||
try { |
|||
Class.forName("com.mysql.jdbc.Driver"); |
|||
connection = DriverManager.getConnection("jdbc:mysql://" + (plugin.getConfig().getString("MySQL.host") +":"+ plugin.getConfig().getString("MySQL.port")) + "/" + plugin.getConfig().getString("MySQL.database") + "?serverTimezone=" + TimeZone.getDefault().getID() + "&autoReconnect=true&wait_timeout=31536000&interactive_timeout=31536000", plugin.getConfig().getString("MySQL.username"), plugin.getConfig().getString("MySQL.password")); |
|||
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[TheBridge] MySQL conectada."); |
|||
newTables(); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} else { |
|||
File DataFile = new File(plugin.getDataFolder(), "/TheBridge.db"); |
|||
if (!DataFile.exists()) { |
|||
try { |
|||
DataFile.createNewFile(); |
|||
} catch (IOException ex) { |
|||
ex.printStackTrace(); |
|||
Bukkit.getPluginManager().disablePlugin(plugin); |
|||
} |
|||
} |
|||
try { |
|||
Class.forName("org.sqlite.JDBC"); |
|||
try { |
|||
connection = DriverManager.getConnection("jdbc:sqlite:" + DataFile); |
|||
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[TheBridge] SQLLite conectado."); |
|||
newTables(); |
|||
} catch (SQLException ex2) { |
|||
ex2.printStackTrace(); |
|||
Bukkit.getPluginManager().disablePlugin(plugin); |
|||
} |
|||
} catch (ClassNotFoundException ex3) { |
|||
ex3.printStackTrace(); |
|||
Bukkit.getPluginManager().disablePlugin(plugin); |
|||
} |
|||
} |
|||
} |
|||
|
|||
public void checkConnection() { |
|||
try { |
|||
if (connection.isClosed() || connection == null){ |
|||
conectar(); |
|||
} |
|||
} catch (SQLException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
public void createNewPlayer(String fId, String name) { |
|||
PreparedStatement preparedStatement = null; |
|||
try { |
|||
StringBuilder queryBuilder = new StringBuilder(); |
|||
queryBuilder.append("INSERT INTO `BG_Cosmetic` "); |
|||
queryBuilder.append("(`UUID`, `Name`, `Cage`, `Taunt`, `Trail`, `KillSound`) "); |
|||
queryBuilder.append("VALUES "); |
|||
queryBuilder.append("(?, ?, ?, ?, ?, ?);"); |
|||
preparedStatement = connection.prepareStatement(queryBuilder.toString()); |
|||
preparedStatement.setString(1, fId); |
|||
preparedStatement.setString(2, name); |
|||
preparedStatement.setString(3, "default"); |
|||
preparedStatement.setString(4, "default"); |
|||
preparedStatement.setString(5, "default"); |
|||
preparedStatement.setString(6, "default"); |
|||
preparedStatement.executeUpdate(); |
|||
} catch (final SQLException sqlException) { |
|||
sqlException.printStackTrace(); |
|||
|
|||
} finally { |
|||
if (preparedStatement != null) { |
|||
try { |
|||
preparedStatement.close(); |
|||
} catch (final SQLException ignored) { |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
public boolean hasPlayer(Player p, String uuid) { |
|||
PreparedStatement statement = null; |
|||
try { |
|||
statement = this.connection.prepareStatement("SELECT UUID FROM BG_Cosmetic WHERE UUID ='" + uuid + "'"); |
|||
ResultSet result = statement.executeQuery(); |
|||
if (result.next()) { |
|||
return true; |
|||
} |
|||
} catch (SQLException e) { |
|||
e.printStackTrace(); |
|||
if (statement != null) { |
|||
try { |
|||
statement.close(); |
|||
} |
|||
catch (SQLException e2) { |
|||
e2.printStackTrace(); |
|||
} |
|||
return false; |
|||
} |
|||
return false; |
|||
} finally { |
|||
if (statement != null) { |
|||
try { |
|||
statement.close(); |
|||
} |
|||
catch (SQLException e2) { |
|||
e2.printStackTrace(); |
|||
} |
|||
} |
|||
} |
|||
if (statement != null) { |
|||
try { |
|||
statement.close(); |
|||
} |
|||
catch (SQLException e2) { |
|||
e2.printStackTrace(); |
|||
} |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
public void loadData(PlayerStat stat) { |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
Connection connection = getConnection(); |
|||
if (!hasPlayer(stat.getPlayer(), stat.getUUID())) { |
|||
createNewPlayer(stat.getUUID(), stat.getPlayer().getName()); |
|||
loadData(stat); |
|||
return; |
|||
} |
|||
PreparedStatement preparedStatement = null; |
|||
ResultSet resultSet = null; |
|||
try { |
|||
StringBuilder queryBuilder = new StringBuilder(); |
|||
queryBuilder.append("SELECT `Cage`, `Taunt`, `Trail`, `KillSound` "); |
|||
queryBuilder.append("FROM `BG_Cosmetic` "); |
|||
queryBuilder.append("WHERE `UUID` = ? "); |
|||
queryBuilder.append("LIMIT 1;"); |
|||
preparedStatement = connection.prepareStatement(queryBuilder.toString()); |
|||
preparedStatement.setString(1, stat.getUUID().toString()); |
|||
resultSet = preparedStatement.executeQuery(); |
|||
if (resultSet != null && resultSet.next()) { |
|||
stat.setCage(resultSet.getString("Cage")); |
|||
} |
|||
} catch (SQLException sqlException) { |
|||
sqlException.printStackTrace(); |
|||
} finally { |
|||
if (resultSet != null) { |
|||
try { |
|||
resultSet.close(); |
|||
} catch (SQLException ignored) { |
|||
} |
|||
} |
|||
if (preparedStatement != null) { |
|||
try { |
|||
preparedStatement.close(); |
|||
} catch (SQLException ignored) { |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}.runTaskAsynchronously(plugin); |
|||
} |
|||
|
|||
public void saveData(PlayerStat stat) { |
|||
checkConnection(); |
|||
Connection connection = getConnection(); |
|||
PreparedStatement preparedStatement = null; |
|||
try { |
|||
StringBuilder queryBuilder = new StringBuilder(); |
|||
queryBuilder.append("UPDATE `BG_Cosmetic` SET "); |
|||
queryBuilder.append("`Cage` = ?, `Taunt` = ?, `Trail` = ?, `KillSound` = ? "); |
|||
queryBuilder.append("WHERE `UUID` = ?;"); |
|||
preparedStatement = connection.prepareStatement(queryBuilder.toString()); |
|||
preparedStatement.setString(1, stat.getCage()); |
|||
preparedStatement.setString(2, "default"); |
|||
preparedStatement.setString(3, "default"); |
|||
preparedStatement.setString(4, "default"); |
|||
preparedStatement.setString(5, stat.getUUID()); |
|||
preparedStatement.executeUpdate(); |
|||
} catch (SQLException sqlException) { |
|||
sqlException.printStackTrace(); |
|||
|
|||
} finally { |
|||
if (preparedStatement != null) { |
|||
try { |
|||
preparedStatement.close(); |
|||
} catch (SQLException ignored) { |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
public Connection getConnection() { |
|||
return connection; |
|||
} |
|||
|
|||
public void newTables() { |
|||
Connection connection = getConnection(); |
|||
try { |
|||
Statement statement = connection.createStatement(); |
|||
try { |
|||
statement.executeUpdate("CREATE TABLE IF NOT EXISTS BG_Cosmetic (UUID VARCHAR(60), Name VARCHAR(60), Cage TEXT, Taunt TEXT, Trail TEXT, KillSound TEXT)"); |
|||
} catch (SQLException ex) { |
|||
try { |
|||
if (statement != null) { |
|||
statement.close(); |
|||
} |
|||
} catch (SQLException ex2) { |
|||
} |
|||
return; |
|||
} finally { |
|||
try { |
|||
if (statement != null) { |
|||
statement.close(); |
|||
} |
|||
} catch (SQLException ex3) { |
|||
} |
|||
} try { |
|||
if (statement != null) { |
|||
statement.close(); |
|||
} |
|||
} catch (SQLException ex4) { |
|||
} |
|||
} catch (SQLException ex5) { |
|||
} |
|||
} |
|||
|
|||
} |
@ -0,0 +1,570 @@ |
|||
package cx.sfy.TheBridge.database; |
|||
|
|||
import java.io.File; |
|||
import java.io.IOException; |
|||
import java.sql.Connection; |
|||
import java.sql.DriverManager; |
|||
import java.sql.PreparedStatement; |
|||
import java.sql.ResultSet; |
|||
import java.sql.SQLException; |
|||
import java.sql.Statement; |
|||
import java.util.TimeZone; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.ChatColor; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.scheduler.BukkitRunnable; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.tops.BoardType; |
|||
import cx.sfy.TheBridge.tops.Top; |
|||
|
|||
public class Database { |
|||
|
|||
public Main plugin; |
|||
private Connection connection; |
|||
|
|||
public Database(Main plugin) { |
|||
this.plugin = plugin; |
|||
conectar(); |
|||
} |
|||
|
|||
public void conectar() { |
|||
if (plugin.getConfig().getBoolean("MySQL.enabled")){ |
|||
try { |
|||
Class.forName("com.mysql.jdbc.Driver"); |
|||
connection = DriverManager.getConnection("jdbc:mysql://" + (plugin.getConfig().getString("MySQL.host") +":"+ plugin.getConfig().getString("MySQL.port")) + "/" + plugin.getConfig().getString("MySQL.database") + "?serverTimezone=" + TimeZone.getDefault().getID() + "&autoReconnect=true&wait_timeout=31536000&interactive_timeout=31536000", plugin.getConfig().getString("MySQL.username"), plugin.getConfig().getString("MySQL.password")); |
|||
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[TheBridge] MySQL conectada."); |
|||
newTables(); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} else { |
|||
File DataFile = new File(plugin.getDataFolder(), "/TheBridge.db"); |
|||
if (!DataFile.exists()) { |
|||
try { |
|||
DataFile.createNewFile(); |
|||
} catch (IOException ex) { |
|||
ex.printStackTrace(); |
|||
Bukkit.getPluginManager().disablePlugin(plugin); |
|||
} |
|||
} |
|||
try { |
|||
Class.forName("org.sqlite.JDBC"); |
|||
try { |
|||
connection = DriverManager.getConnection("jdbc:sqlite:" + DataFile); |
|||
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[TheBridge] SQLLite conectado."); |
|||
newTables(); |
|||
} catch (SQLException ex2) { |
|||
ex2.printStackTrace(); |
|||
Bukkit.getPluginManager().disablePlugin(plugin); |
|||
} |
|||
} catch (ClassNotFoundException ex3) { |
|||
ex3.printStackTrace(); |
|||
Bukkit.getPluginManager().disablePlugin(plugin); |
|||
} |
|||
} |
|||
} |
|||
|
|||
public void checkConnection() { |
|||
try { |
|||
if (connection.isClosed() || connection == null){ |
|||
conectar(); |
|||
} |
|||
} catch (SQLException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
public void loadNormalKills() { |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
Connection connection = getConnection(); |
|||
PreparedStatement preparedStatement = null; |
|||
ResultSet resultSet = null; |
|||
try { |
|||
StringBuilder queryBuilder = new StringBuilder(); |
|||
queryBuilder.append("SELECT `UUID`, `Name`, `NKills` "); |
|||
queryBuilder.append("FROM `BG_Data` "); |
|||
queryBuilder.append("GROUP BY `UUID` "); |
|||
queryBuilder.append("ORDER BY `NKills` DESC LIMIT 10;"); |
|||
preparedStatement = connection.prepareStatement(queryBuilder.toString()); |
|||
resultSet = preparedStatement.executeQuery(); |
|||
while (resultSet.next()) { |
|||
new Top(resultSet.getString(2), resultSet.getInt(3), BoardType.NORMAL_KILLS); |
|||
} |
|||
} catch (SQLException sqlException) { |
|||
sqlException.printStackTrace(); |
|||
} finally { |
|||
if (resultSet != null) { |
|||
try { |
|||
resultSet.close(); |
|||
} catch (SQLException ignored) { |
|||
} |
|||
} |
|||
if (preparedStatement != null) { |
|||
try { |
|||
preparedStatement.close(); |
|||
} catch (SQLException ignored) { |
|||
} |
|||
} |
|||
} |
|||
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { |
|||
@Override |
|||
public void run() { |
|||
if (plugin.getLM().getNormalKills() != null) { |
|||
plugin.getTOP().createTop(plugin.getLM().getNormalKills(), BoardType.NORMAL_KILLS); |
|||
} |
|||
} |
|||
}, 0); |
|||
|
|||
} |
|||
}.runTaskAsynchronously(plugin); |
|||
} |
|||
|
|||
public void loadNormalWins() { |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
Connection connection = getConnection(); |
|||
PreparedStatement preparedStatement = null; |
|||
ResultSet resultSet = null; |
|||
try { |
|||
StringBuilder queryBuilder = new StringBuilder(); |
|||
queryBuilder.append("SELECT `UUID`, `Name`, `NWins` "); |
|||
queryBuilder.append("FROM `BG_Data` "); |
|||
queryBuilder.append("GROUP BY `UUID` "); |
|||
queryBuilder.append("ORDER BY `NWins` DESC LIMIT 10;"); |
|||
preparedStatement = connection.prepareStatement(queryBuilder.toString()); |
|||
resultSet = preparedStatement.executeQuery(); |
|||
while (resultSet.next()) { |
|||
new Top(resultSet.getString(2), resultSet.getInt(3), BoardType.NORMAL_WINS); |
|||
} |
|||
} catch (SQLException sqlException) { |
|||
sqlException.printStackTrace(); |
|||
} finally { |
|||
if (resultSet != null) { |
|||
try { |
|||
resultSet.close(); |
|||
} catch (SQLException ignored) { |
|||
} |
|||
} |
|||
if (preparedStatement != null) { |
|||
try { |
|||
preparedStatement.close(); |
|||
} catch (SQLException ignored) { |
|||
} |
|||
} |
|||
} |
|||
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { |
|||
@Override |
|||
public void run() { |
|||
if (plugin.getLM().getNormalWins() != null) { |
|||
plugin.getTOP().createTop(plugin.getLM().getNormalWins(), BoardType.NORMAL_WINS); |
|||
} |
|||
} |
|||
}, 0); |
|||
} |
|||
}.runTaskAsynchronously(plugin); |
|||
} |
|||
|
|||
public void loadNormalGoals() { |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
Connection connection = getConnection(); |
|||
PreparedStatement preparedStatement = null; |
|||
ResultSet resultSet = null; |
|||
try { |
|||
StringBuilder queryBuilder = new StringBuilder(); |
|||
queryBuilder.append("SELECT `UUID`, `Name`, `NGoals` "); |
|||
queryBuilder.append("FROM `BG_Data` "); |
|||
queryBuilder.append("GROUP BY `UUID` "); |
|||
queryBuilder.append("ORDER BY `NGoals` DESC LIMIT 10;"); |
|||
preparedStatement = connection.prepareStatement(queryBuilder.toString()); |
|||
resultSet = preparedStatement.executeQuery(); |
|||
while (resultSet.next()) { |
|||
new Top(resultSet.getString(2), resultSet.getInt(3), BoardType.NORMAL_GOALS); |
|||
} |
|||
} catch (SQLException sqlException) { |
|||
sqlException.printStackTrace(); |
|||
} finally { |
|||
if (resultSet != null) { |
|||
try { |
|||
resultSet.close(); |
|||
} catch (SQLException ignored) { |
|||
} |
|||
} |
|||
if (preparedStatement != null) { |
|||
try { |
|||
preparedStatement.close(); |
|||
} catch (SQLException ignored) { |
|||
} |
|||
} |
|||
} |
|||
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { |
|||
@Override |
|||
public void run() { |
|||
if (plugin.getLM().getNormalGoals() != null) { |
|||
plugin.getTOP().createTop(plugin.getLM().getNormalGoals(), BoardType.NORMAL_GOALS); |
|||
} |
|||
} |
|||
}, 0); |
|||
} |
|||
}.runTaskAsynchronously(plugin); |
|||
} |
|||
|
|||
public void loadFourKills() { |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
Connection connection = getConnection(); |
|||
PreparedStatement preparedStatement = null; |
|||
ResultSet resultSet = null; |
|||
try { |
|||
StringBuilder queryBuilder = new StringBuilder(); |
|||
queryBuilder.append("SELECT `UUID`, `Name`, `FKills` "); |
|||
queryBuilder.append("FROM `BG_Data` "); |
|||
queryBuilder.append("GROUP BY `UUID` "); |
|||
queryBuilder.append("ORDER BY `FKills` DESC LIMIT 10;"); |
|||
preparedStatement = connection.prepareStatement(queryBuilder.toString()); |
|||
resultSet = preparedStatement.executeQuery(); |
|||
while (resultSet.next()) { |
|||
new Top(resultSet.getString(2), resultSet.getInt(3), BoardType.FOUR_KILLS); |
|||
} |
|||
} catch (SQLException sqlException) { |
|||
sqlException.printStackTrace(); |
|||
} finally { |
|||
if (resultSet != null) { |
|||
try { |
|||
resultSet.close(); |
|||
} catch (SQLException ignored) { |
|||
} |
|||
} |
|||
if (preparedStatement != null) { |
|||
try { |
|||
preparedStatement.close(); |
|||
} catch (SQLException ignored) { |
|||
} |
|||
} |
|||
} |
|||
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { |
|||
@Override |
|||
public void run() { |
|||
if (plugin.getLM().getFourKills() != null) { |
|||
plugin.getTOP().createTop(plugin.getLM().getFourKills(), BoardType.FOUR_KILLS); |
|||
} |
|||
} |
|||
}, 0); |
|||
} |
|||
}.runTaskAsynchronously(plugin); |
|||
} |
|||
|
|||
public void loadFourWins() { |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
Connection connection = getConnection(); |
|||
PreparedStatement preparedStatement = null; |
|||
ResultSet resultSet = null; |
|||
try { |
|||
StringBuilder queryBuilder = new StringBuilder(); |
|||
queryBuilder.append("SELECT `UUID`, `Name`, `FWins` "); |
|||
queryBuilder.append("FROM `BG_Data` "); |
|||
queryBuilder.append("GROUP BY `UUID` "); |
|||
queryBuilder.append("ORDER BY `FWins` DESC LIMIT 10;"); |
|||
preparedStatement = connection.prepareStatement(queryBuilder.toString()); |
|||
resultSet = preparedStatement.executeQuery(); |
|||
while (resultSet.next()) { |
|||
new Top(resultSet.getString(2), resultSet.getInt(3), BoardType.FOUR_WINS); |
|||
} |
|||
} catch (SQLException sqlException) { |
|||
sqlException.printStackTrace(); |
|||
} finally { |
|||
if (resultSet != null) { |
|||
try { |
|||
resultSet.close(); |
|||
} catch (SQLException ignored) { |
|||
} |
|||
} |
|||
if (preparedStatement != null) { |
|||
try { |
|||
preparedStatement.close(); |
|||
} catch (SQLException ignored) { |
|||
} |
|||
} |
|||
} |
|||
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { |
|||
@Override |
|||
public void run() { |
|||
if (plugin.getLM().getFourWins() != null) { |
|||
plugin.getTOP().createTop(plugin.getLM().getFourWins(), BoardType.FOUR_WINS); |
|||
} |
|||
} |
|||
}, 0); |
|||
} |
|||
}.runTaskAsynchronously(plugin); |
|||
} |
|||
|
|||
public void loadFourGoals() { |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
Connection connection = getConnection(); |
|||
PreparedStatement preparedStatement = null; |
|||
ResultSet resultSet = null; |
|||
try { |
|||
StringBuilder queryBuilder = new StringBuilder(); |
|||
queryBuilder.append("SELECT `UUID`, `Name`, `FGoals` "); |
|||
queryBuilder.append("FROM `BG_Data` "); |
|||
queryBuilder.append("GROUP BY `UUID` "); |
|||
queryBuilder.append("ORDER BY `FGoals` DESC LIMIT 10;"); |
|||
preparedStatement = connection.prepareStatement(queryBuilder.toString()); |
|||
resultSet = preparedStatement.executeQuery(); |
|||
while (resultSet.next()) { |
|||
new Top(resultSet.getString(2), resultSet.getInt(3), BoardType.FOUR_GOALS); |
|||
} |
|||
} catch (SQLException sqlException) { |
|||
sqlException.printStackTrace(); |
|||
} finally { |
|||
if (resultSet != null) { |
|||
try { |
|||
resultSet.close(); |
|||
} catch (SQLException ignored) { |
|||
} |
|||
} |
|||
if (preparedStatement != null) { |
|||
try { |
|||
preparedStatement.close(); |
|||
} catch (SQLException ignored) { |
|||
} |
|||
} |
|||
} |
|||
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { |
|||
@Override |
|||
public void run() { |
|||
if (plugin.getLM().getFourGoals() != null) { |
|||
plugin.getTOP().createTop(plugin.getLM().getFourGoals(), BoardType.FOUR_GOALS); |
|||
} |
|||
} |
|||
}, 0); |
|||
} |
|||
}.runTaskAsynchronously(plugin); |
|||
} |
|||
|
|||
public void createNewPlayer(String fId, String name) { |
|||
PreparedStatement preparedStatement = null; |
|||
try { |
|||
StringBuilder queryBuilder = new StringBuilder(); |
|||
queryBuilder.append("INSERT INTO `BG_Data` "); |
|||
queryBuilder.append("(`UUID`, `Name`, `Coins`, `NKills`, `NWins`, `NGoals`, `FKills`, `FWins`, `FGoals`, `Inventory`, `XP`, `Placed`, `Broken`) "); |
|||
queryBuilder.append("VALUES "); |
|||
queryBuilder.append("(?, ?, 0, 0, 0, 0, 0, 0, 0, ?, 0, 0, 0);"); |
|||
preparedStatement = connection.prepareStatement(queryBuilder.toString()); |
|||
preparedStatement.setString(1, fId); |
|||
preparedStatement.setString(2, name); |
|||
preparedStatement.setString(3, "none"); |
|||
preparedStatement.executeUpdate(); |
|||
} catch (final SQLException sqlException) { |
|||
sqlException.printStackTrace(); |
|||
|
|||
} finally { |
|||
if (preparedStatement != null) { |
|||
try { |
|||
preparedStatement.close(); |
|||
} catch (final SQLException ignored) { |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
public boolean hasPlayer(Player p, String uuid) { |
|||
PreparedStatement statement = null; |
|||
try { |
|||
statement = this.connection.prepareStatement("SELECT UUID FROM BG_Data WHERE UUID ='" + uuid + "'"); |
|||
ResultSet result = statement.executeQuery(); |
|||
if (result.next()) { |
|||
return true; |
|||
} |
|||
} catch (SQLException e) { |
|||
e.printStackTrace(); |
|||
if (statement != null) { |
|||
try { |
|||
statement.close(); |
|||
} |
|||
catch (SQLException e2) { |
|||
e2.printStackTrace(); |
|||
} |
|||
return false; |
|||
} |
|||
return false; |
|||
} finally { |
|||
if (statement != null) { |
|||
try { |
|||
statement.close(); |
|||
} |
|||
catch (SQLException e2) { |
|||
e2.printStackTrace(); |
|||
} |
|||
} |
|||
} |
|||
if (statement != null) { |
|||
try { |
|||
statement.close(); |
|||
} |
|||
catch (SQLException e2) { |
|||
e2.printStackTrace(); |
|||
} |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
public void loadData(PlayerStat stat) { |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
Connection connection = getConnection(); |
|||
if (!hasPlayer(stat.getPlayer(), stat.getUUID())) { |
|||
createNewPlayer(stat.getUUID(), stat.getPlayer().getName()); |
|||
loadData(stat); |
|||
return; |
|||
} |
|||
PreparedStatement preparedStatement = null; |
|||
ResultSet resultSet = null; |
|||
try { |
|||
StringBuilder queryBuilder = new StringBuilder(); |
|||
queryBuilder.append("SELECT `NKills`, `NWins`, `NGoals`, `FKills`, `FWins`, `FGoals`, `Coins`, `Inventory`, `XP`, `Placed`, `Broken` "); |
|||
queryBuilder.append("FROM `BG_Data` "); |
|||
queryBuilder.append("WHERE `UUID` = ? "); |
|||
queryBuilder.append("LIMIT 1;"); |
|||
preparedStatement = connection.prepareStatement(queryBuilder.toString()); |
|||
preparedStatement.setString(1, stat.getUUID().toString()); |
|||
resultSet = preparedStatement.executeQuery(); |
|||
if (resultSet != null && resultSet.next()) { |
|||
stat.setNormalKills(resultSet.getInt("NKills")); |
|||
stat.setNormalWins(resultSet.getInt("NWins")); |
|||
stat.setNormalGoals(resultSet.getInt("NGoals")); |
|||
stat.setFourKills(resultSet.getInt("FKills")); |
|||
stat.setFourWins(resultSet.getInt("FWins")); |
|||
stat.setFourGoals(resultSet.getInt("FGoals")); |
|||
stat.setCoins(resultSet.getInt("Coins")); |
|||
if (!resultSet.getString("Inventory").equals("none")) { |
|||
try { |
|||
stat.setHotbar(plugin.getKit().fromBase64(resultSet.getString("Inventory")).getContents()); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} else { |
|||
stat.setHotbar(null); |
|||
} |
|||
stat.setXP(resultSet.getInt("XP")); |
|||
stat.setPlaced(resultSet.getInt("Placed")); |
|||
stat.setBroken(resultSet.getInt("Broken")); |
|||
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { |
|||
@Override |
|||
public void run() { |
|||
plugin.getTOP().createInfo(stat.getPlayer()); |
|||
plugin.getSB().createLobbyBoard(stat.getPlayer()); |
|||
for (Player on : plugin.getSB().getSB().keySet()) { |
|||
plugin.getSB().update(on); |
|||
} |
|||
} |
|||
}, 0); |
|||
} |
|||
} catch (SQLException sqlException) { |
|||
sqlException.printStackTrace(); |
|||
} finally { |
|||
if (resultSet != null) { |
|||
try { |
|||
resultSet.close(); |
|||
} catch (SQLException ignored) { |
|||
} |
|||
} |
|||
if (preparedStatement != null) { |
|||
try { |
|||
preparedStatement.close(); |
|||
} catch (SQLException ignored) { |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}.runTaskAsynchronously(plugin); |
|||
} |
|||
|
|||
public void saveData(PlayerStat stat) { |
|||
checkConnection(); |
|||
Connection connection = getConnection(); |
|||
PreparedStatement preparedStatement = null; |
|||
try { |
|||
StringBuilder queryBuilder = new StringBuilder(); |
|||
queryBuilder.append("UPDATE `BG_Data` SET "); |
|||
queryBuilder.append("`NKills` = ?, `NWins` = ?, `NGoals` = ?, `FKills` = ?, `FWins` = ?, `FGoals` = ?, `Coins` = ?, `Inventory` = ?, `XP` = ?, `Placed` = ?, `Broken` = ? "); |
|||
queryBuilder.append("WHERE `UUID` = ?;"); |
|||
preparedStatement = connection.prepareStatement(queryBuilder.toString()); |
|||
preparedStatement.setInt(1, stat.getNormalKills()); |
|||
preparedStatement.setInt(2, stat.getNormalWins()); |
|||
preparedStatement.setInt(3, stat.getNormalGoals()); |
|||
preparedStatement.setInt(4, stat.getFourKills()); |
|||
preparedStatement.setInt(5, stat.getFourWins()); |
|||
preparedStatement.setInt(6, stat.getFourGoals()); |
|||
preparedStatement.setInt(7, stat.getCoins()); |
|||
if (stat.getHotbar() != null) { |
|||
preparedStatement.setString(8, plugin.getKit().itemStackArrayToBase64(stat.getHotbar())); |
|||
} else { |
|||
preparedStatement.setString(8, "none"); |
|||
} |
|||
preparedStatement.setInt(9, stat.getXP()); |
|||
preparedStatement.setInt(10, stat.getPlaced()); |
|||
preparedStatement.setInt(11, stat.getBroken()); |
|||
preparedStatement.setString(12, stat.getUUID()); |
|||
preparedStatement.executeUpdate(); |
|||
} catch (SQLException sqlException) { |
|||
sqlException.printStackTrace(); |
|||
|
|||
} finally { |
|||
if (preparedStatement != null) { |
|||
try { |
|||
preparedStatement.close(); |
|||
} catch (SQLException ignored) { |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
public Connection getConnection() { |
|||
return connection; |
|||
} |
|||
|
|||
public void newTables() { |
|||
Connection connection = getConnection(); |
|||
try { |
|||
Statement statement = connection.createStatement(); |
|||
try { |
|||
statement.executeUpdate("CREATE TABLE IF NOT EXISTS BG_Data (UUID VARCHAR(60), Name VARCHAR(60), NKills INT, NWins INT, NGoals INT, FKills INT, FWins INT, FGoals INT, Coins INT, Inventory TEXT, XP INT, Placed INT, Broken INT, Cage TEXT)"); |
|||
} catch (SQLException ex) { |
|||
try { |
|||
if (statement != null) { |
|||
statement.close(); |
|||
} |
|||
} catch (SQLException ex2) { |
|||
} |
|||
return; |
|||
} finally { |
|||
try { |
|||
if (statement != null) { |
|||
statement.close(); |
|||
} |
|||
} catch (SQLException ex3) { |
|||
} |
|||
} try { |
|||
if (statement != null) { |
|||
statement.close(); |
|||
} |
|||
} catch (SQLException ex4) { |
|||
} |
|||
} catch (SQLException ex5) { |
|||
} |
|||
} |
|||
|
|||
} |
@ -0,0 +1,254 @@ |
|||
package cx.sfy.TheBridge.database; |
|||
|
|||
import java.util.HashMap; |
|||
import java.util.UUID; |
|||
|
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.inventory.ItemStack; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.archievements.ArchiType; |
|||
|
|||
public class PlayerStat { |
|||
|
|||
public static HashMap<Player, PlayerStat> players = new HashMap<Player, PlayerStat>(); |
|||
private Player p; |
|||
private UUID uuid; |
|||
private String name; |
|||
private ItemStack[] hotbar; |
|||
private String cage; |
|||
private int normalWins; |
|||
private int fourWins; |
|||
private int normalKills; |
|||
private int fourKills; |
|||
private int normalDeaths; |
|||
private int fourDeaths; |
|||
private int normalGoals; |
|||
private int fourGoals; |
|||
private int coins; |
|||
private int xp; |
|||
private int broken; |
|||
private int placed; |
|||
|
|||
public PlayerStat(Player p) { |
|||
this.p = p; |
|||
this.uuid = p.getUniqueId(); |
|||
this.name = p.getName(); |
|||
Main.get().getDB().loadData(this); |
|||
Main.get().getCB().loadData(this); |
|||
players.put(p, this); |
|||
} |
|||
|
|||
public static PlayerStat getPlayerStat(Player p) { |
|||
return players.get(p); |
|||
} |
|||
|
|||
public String getCage() { |
|||
return cage; |
|||
} |
|||
|
|||
public void setCage(String cage) { |
|||
this.cage = cage; |
|||
} |
|||
|
|||
public void addBroken() { |
|||
broken = broken + 1; |
|||
if (!Main.get().isArchiDisabled()) { |
|||
Main.get().getAM().check(p, broken, ArchiType.BLOCKS_BROKEN); |
|||
} |
|||
} |
|||
|
|||
public void addPlaced() { |
|||
placed = placed + 1; |
|||
if (!Main.get().isArchiDisabled()) { |
|||
Main.get().getAM().check(p, placed, ArchiType.BLOCKS_PLACED); |
|||
} |
|||
} |
|||
|
|||
public int getBroken() { |
|||
return broken; |
|||
} |
|||
|
|||
public void setBroken(int broken) { |
|||
this.broken = broken; |
|||
} |
|||
|
|||
public int getPlaced() { |
|||
return placed; |
|||
} |
|||
|
|||
public void setPlaced(int placed) { |
|||
this.placed = placed; |
|||
} |
|||
|
|||
public Player getPlayer() { |
|||
return p; |
|||
} |
|||
|
|||
public String getUUID() { |
|||
return uuid.toString(); |
|||
} |
|||
|
|||
public String getName() { |
|||
return name; |
|||
} |
|||
|
|||
public ItemStack[] getHotbar() { |
|||
return hotbar; |
|||
} |
|||
|
|||
public void setHotbar(ItemStack[] hotbar) { |
|||
this.hotbar = hotbar; |
|||
} |
|||
|
|||
public void addNormalKills() { |
|||
normalKills = normalKills + 1; |
|||
xp += Main.get().getConfig().getInt("xp.normal.kill"); |
|||
coins += Main.get().getConfig().getInt("coins.normal.kill"); |
|||
if (!Main.get().isArchiDisabled()) { |
|||
Main.get().getAM().check(p, normalKills + fourKills, ArchiType.KILLS); |
|||
} |
|||
} |
|||
|
|||
public void addNormalWins() { |
|||
normalWins = normalWins + 1; |
|||
xp += Main.get().getConfig().getInt("xp.normal.win"); |
|||
coins += Main.get().getConfig().getInt("coins.normal.win"); |
|||
if (!Main.get().isArchiDisabled()) { |
|||
Main.get().getAM().check(p, normalWins + fourWins, ArchiType.WINS); |
|||
} |
|||
} |
|||
|
|||
public void addNormalGoals() { |
|||
normalGoals = normalGoals + 1; |
|||
xp += Main.get().getConfig().getInt("xp.normal.goals"); |
|||
coins += Main.get().getConfig().getInt("coins.normal.goals"); |
|||
if (!Main.get().isArchiDisabled()) { |
|||
Main.get().getAM().check(p, normalGoals + fourGoals, ArchiType.GOALS); |
|||
} |
|||
} |
|||
|
|||
public void addFourKills() { |
|||
fourKills = fourKills + 1; |
|||
xp += Main.get().getConfig().getInt("xp.four.kill"); |
|||
coins += Main.get().getConfig().getInt("coins.four.kill"); |
|||
if (!Main.get().isArchiDisabled()) { |
|||
Main.get().getAM().check(p, normalKills + fourKills, ArchiType.KILLS); |
|||
} |
|||
} |
|||
|
|||
public void addFourWins() { |
|||
fourWins = fourWins + 1; |
|||
xp += Main.get().getConfig().getInt("coins.four.win"); |
|||
coins += Main.get().getConfig().getInt("coins.four.win"); |
|||
if (!Main.get().isArchiDisabled()) { |
|||
Main.get().getAM().check(p, normalWins + fourWins, ArchiType.WINS); |
|||
} |
|||
} |
|||
|
|||
public void addFourGoals() { |
|||
fourGoals = fourGoals + 1; |
|||
xp += coins + Main.get().getConfig().getInt("xp.four.goals"); |
|||
coins += Main.get().getConfig().getInt("coins.four.goals"); |
|||
if (!Main.get().isArchiDisabled()) { |
|||
Main.get().getAM().check(p, normalGoals + fourGoals, ArchiType.GOALS); |
|||
} |
|||
} |
|||
|
|||
public void addCoins(int coins) { |
|||
this.coins = this.coins + coins; |
|||
} |
|||
|
|||
public void removeCoins(int coins) { |
|||
this.coins = this.coins - coins; |
|||
} |
|||
|
|||
public void addXP(int xp) { |
|||
this.xp = this.xp + xp; |
|||
} |
|||
|
|||
public void removeXP(int xp) { |
|||
this.xp = this.xp - xp; |
|||
} |
|||
|
|||
public int getNormalWins() { |
|||
return normalWins; |
|||
} |
|||
|
|||
public int getFourWins() { |
|||
return fourWins; |
|||
} |
|||
|
|||
public int getNormalKills() { |
|||
return normalKills; |
|||
} |
|||
|
|||
public int getFourKills() { |
|||
return fourKills; |
|||
} |
|||
|
|||
public int getNormalDeaths() { |
|||
return normalDeaths; |
|||
} |
|||
|
|||
public int getFourDeaths() { |
|||
return fourDeaths; |
|||
} |
|||
|
|||
public int getNormalGoals() { |
|||
return normalGoals; |
|||
} |
|||
|
|||
public int getFourGoals() { |
|||
return fourGoals; |
|||
} |
|||
|
|||
public int getCoins() { |
|||
return coins; |
|||
} |
|||
|
|||
public int getXP() { |
|||
return xp; |
|||
} |
|||
|
|||
public void setNormalWins(int normalWins) { |
|||
this.normalWins = normalWins; |
|||
} |
|||
|
|||
public void setFourWins(int fourWins) { |
|||
this.fourWins = fourWins; |
|||
} |
|||
|
|||
public void setNormalKills(int normalKills) { |
|||
this.normalKills = normalKills; |
|||
} |
|||
|
|||
public void setFourKills(int fourKills) { |
|||
this.fourKills = fourKills; |
|||
} |
|||
|
|||
public void setNormalDeaths(int normalDeaths) { |
|||
this.normalDeaths = normalDeaths; |
|||
} |
|||
|
|||
public void setFourDeaths(int fourDeaths) { |
|||
this.fourDeaths = fourDeaths; |
|||
} |
|||
|
|||
public void setNormalGoals(int normalGoals) { |
|||
this.normalGoals = normalGoals; |
|||
} |
|||
|
|||
public void setFourGoals(int fourGoals) { |
|||
this.fourGoals = fourGoals; |
|||
} |
|||
|
|||
public void setCoins(int coins) { |
|||
this.coins = coins; |
|||
} |
|||
|
|||
public void setXP(int xp) { |
|||
this.xp = xp; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,65 @@ |
|||
package cx.sfy.TheBridge.fanciful; |
|||
|
|||
import org.apache.commons.lang.Validate; |
|||
|
|||
import java.lang.reflect.Array; |
|||
import java.util.Arrays; |
|||
import java.util.Collection; |
|||
|
|||
public final class ArrayWrapper<E> { |
|||
|
|||
public ArrayWrapper(@SuppressWarnings("unchecked") E... elements) { |
|||
setArray(elements); |
|||
} |
|||
|
|||
private E[] _array; |
|||
|
|||
public E[] getArray() { |
|||
return _array; |
|||
} |
|||
|
|||
public void setArray(E[] array) { |
|||
Validate.notNull(array, "The array must not be null."); |
|||
_array = array; |
|||
} |
|||
|
|||
@SuppressWarnings("rawtypes") |
|||
@Override |
|||
public boolean equals(Object other) { |
|||
if (!(other instanceof ArrayWrapper)) { |
|||
return false; |
|||
} |
|||
return Arrays.equals(_array, ((ArrayWrapper) other)._array); |
|||
} |
|||
|
|||
@Override |
|||
public int hashCode() { |
|||
return Arrays.hashCode(_array); |
|||
} |
|||
|
|||
@SuppressWarnings("unchecked") |
|||
public static <T> T[] toArray(Iterable<? extends T> list, Class<T> c) { |
|||
int size = -1; |
|||
if (list instanceof Collection<?>) { |
|||
@SuppressWarnings("rawtypes") |
|||
Collection coll = (Collection) list; |
|||
size = coll.size(); |
|||
} |
|||
|
|||
|
|||
if (size < 0) { |
|||
size = 0; |
|||
for (@SuppressWarnings("unused") T element : list) { |
|||
size++; |
|||
} |
|||
} |
|||
|
|||
T[] result = (T[]) Array.newInstance(c, size); |
|||
int i = 0; |
|||
for (T element : list) { |
|||
result[i++] = element; |
|||
} |
|||
return result; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,407 @@ |
|||
package cx.sfy.TheBridge.fanciful; |
|||
|
|||
import com.google.gson.JsonArray; |
|||
import com.google.gson.JsonElement; |
|||
import com.google.gson.JsonObject; |
|||
import com.google.gson.JsonParser; |
|||
import com.google.gson.stream.JsonWriter; |
|||
|
|||
import cx.sfy.TheBridge.fanciful.ArrayWrapper; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.ChatColor; |
|||
import org.bukkit.command.CommandSender; |
|||
import org.bukkit.configuration.serialization.ConfigurationSerializable; |
|||
import org.bukkit.configuration.serialization.ConfigurationSerialization; |
|||
import org.bukkit.entity.Player; |
|||
|
|||
import static cx.sfy.TheBridge.fanciful.TextualComponent.rawText; |
|||
|
|||
import java.io.IOException; |
|||
import java.io.StringWriter; |
|||
import java.util.ArrayList; |
|||
import java.util.Arrays; |
|||
import java.util.HashMap; |
|||
import java.util.Iterator; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.logging.Level; |
|||
|
|||
public class FancyMessage implements JsonRepresentedObject, Cloneable, Iterable<MessagePart>, ConfigurationSerializable { |
|||
|
|||
static { |
|||
ConfigurationSerialization.registerClass(FancyMessage.class); |
|||
} |
|||
|
|||
private List<MessagePart> messageParts; |
|||
private String jsonString; |
|||
private boolean dirty; |
|||
|
|||
@Override |
|||
public FancyMessage clone() throws CloneNotSupportedException { |
|||
FancyMessage instance = (FancyMessage) super.clone(); |
|||
instance.messageParts = new ArrayList<MessagePart>(messageParts.size()); |
|||
for (int i = 0; i < messageParts.size(); i++) { |
|||
instance.messageParts.add(i, messageParts.get(i).clone()); |
|||
} |
|||
instance.dirty = false; |
|||
instance.jsonString = null; |
|||
return instance; |
|||
} |
|||
|
|||
public FancyMessage(final String firstPartText) { |
|||
this(rawText(firstPartText)); |
|||
} |
|||
|
|||
public FancyMessage(final TextualComponent firstPartText) { |
|||
messageParts = new ArrayList<MessagePart>(); |
|||
messageParts.add(new MessagePart(firstPartText)); |
|||
jsonString = null; |
|||
dirty = false; |
|||
} |
|||
|
|||
public FancyMessage() { |
|||
this((TextualComponent) null); |
|||
} |
|||
|
|||
public FancyMessage text(String text) { |
|||
MessagePart latest = latest(); |
|||
latest.text = rawText(text); |
|||
dirty = true; |
|||
return this; |
|||
} |
|||
|
|||
public FancyMessage text(TextualComponent text) { |
|||
MessagePart latest = latest(); |
|||
latest.text = text; |
|||
dirty = true; |
|||
return this; |
|||
} |
|||
|
|||
public FancyMessage color(final ChatColor color) { |
|||
if (!color.isColor()) { |
|||
throw new IllegalArgumentException(color.name() + " is not a color"); |
|||
} |
|||
latest().color = color; |
|||
dirty = true; |
|||
return this; |
|||
} |
|||
|
|||
public FancyMessage style(ChatColor... styles) { |
|||
for (final ChatColor style : styles) { |
|||
if (!style.isFormat()) { |
|||
throw new IllegalArgumentException(style.name() + " is not a style"); |
|||
} |
|||
} |
|||
latest().styles.addAll(Arrays.asList(styles)); |
|||
dirty = true; |
|||
return this; |
|||
} |
|||
|
|||
public FancyMessage file(final String path) { |
|||
onClick("open_file", path); |
|||
return this; |
|||
} |
|||
|
|||
public FancyMessage link(final String url) { |
|||
onClick("open_url", url); |
|||
return this; |
|||
} |
|||
|
|||
public FancyMessage suggest(final String command) { |
|||
onClick("suggest_command", command); |
|||
return this; |
|||
} |
|||
|
|||
public FancyMessage insert(final String command) { |
|||
latest().insertionData = command; |
|||
dirty = true; |
|||
return this; |
|||
} |
|||
|
|||
public FancyMessage command(final String command) { |
|||
onClick("run_command", command); |
|||
return this; |
|||
} |
|||
|
|||
public FancyMessage achievementTooltip(final String name) { |
|||
onHover("show_achievement", new JsonString("achievement." + name)); |
|||
return this; |
|||
} |
|||
|
|||
public FancyMessage tooltip(final String text) { |
|||
onHover("show_text", new JsonString(text)); |
|||
return this; |
|||
} |
|||
|
|||
public FancyMessage tooltip(final Iterable<String> lines) { |
|||
tooltip(ArrayWrapper.toArray(lines, String.class)); |
|||
return this; |
|||
} |
|||
|
|||
public FancyMessage tooltip(final String... lines) { |
|||
StringBuilder builder = new StringBuilder(); |
|||
for (int i = 0; i < lines.length; i++) { |
|||
builder.append(lines[i]); |
|||
if (i != lines.length - 1) { |
|||
builder.append('\n'); |
|||
} |
|||
} |
|||
tooltip(builder.toString()); |
|||
return this; |
|||
} |
|||
|
|||
public FancyMessage formattedTooltip(FancyMessage text) { |
|||
for (MessagePart component : text.messageParts) { |
|||
if (component.clickActionData != null && component.clickActionName != null) { |
|||
throw new IllegalArgumentException("The tooltip text cannot have click data."); |
|||
} else if (component.hoverActionData != null && component.hoverActionName != null) { |
|||
throw new IllegalArgumentException("The tooltip text cannot have a tooltip."); |
|||
} |
|||
} |
|||
onHover("show_text", text); |
|||
return this; |
|||
} |
|||
|
|||
public FancyMessage formattedTooltip(FancyMessage... lines) { |
|||
if (lines.length < 1) { |
|||
onHover(null, null); |
|||
return this; |
|||
} |
|||
|
|||
FancyMessage result = new FancyMessage(); |
|||
result.messageParts.clear(); |
|||
|
|||
for (int i = 0; i < lines.length; i++) { |
|||
try { |
|||
for (MessagePart component : lines[i]) { |
|||
if (component.clickActionData != null && component.clickActionName != null) { |
|||
throw new IllegalArgumentException("The tooltip text cannot have click data."); |
|||
} else if (component.hoverActionData != null && component.hoverActionName != null) { |
|||
throw new IllegalArgumentException("The tooltip text cannot have a tooltip."); |
|||
} |
|||
if (component.hasText()) { |
|||
result.messageParts.add(component.clone()); |
|||
} |
|||
} |
|||
if (i != lines.length - 1) { |
|||
result.messageParts.add(new MessagePart(rawText("\n"))); |
|||
} |
|||
} catch (CloneNotSupportedException e) { |
|||
Bukkit.getLogger().log(Level.WARNING, "Failed to clone object", e); |
|||
return this; |
|||
} |
|||
} |
|||
return formattedTooltip(result.messageParts.isEmpty() ? null : result); // Throws NPE if size is 0, intended
|
|||
} |
|||
|
|||
public FancyMessage formattedTooltip(final Iterable<FancyMessage> lines) { |
|||
return formattedTooltip(ArrayWrapper.toArray(lines, FancyMessage.class)); |
|||
} |
|||
|
|||
public FancyMessage translationReplacements(final String... replacements) { |
|||
for (String str : replacements) { |
|||
latest().translationReplacements.add(new JsonString(str)); |
|||
} |
|||
dirty = true; |
|||
|
|||
return this; |
|||
} |
|||
|
|||
public FancyMessage translationReplacements(final FancyMessage... replacements) { |
|||
for (FancyMessage str : replacements) { |
|||
latest().translationReplacements.add(str); |
|||
} |
|||
|
|||
dirty = true; |
|||
|
|||
return this; |
|||
} |
|||
|
|||
public FancyMessage translationReplacements(final Iterable<FancyMessage> replacements) { |
|||
return translationReplacements(ArrayWrapper.toArray(replacements, FancyMessage.class)); |
|||
} |
|||
|
|||
public FancyMessage then(final String text) { |
|||
return then(rawText(text)); |
|||
} |
|||
|
|||
public FancyMessage then(final TextualComponent text) { |
|||
if (!latest().hasText()) { |
|||
throw new IllegalStateException("previous message part has no text"); |
|||
} |
|||
messageParts.add(new MessagePart(text)); |
|||
dirty = true; |
|||
return this; |
|||
} |
|||
|
|||
public FancyMessage then() { |
|||
if (!latest().hasText()) { |
|||
throw new IllegalStateException("previous message part has no text"); |
|||
} |
|||
messageParts.add(new MessagePart()); |
|||
dirty = true; |
|||
return this; |
|||
} |
|||
|
|||
@Override |
|||
public void writeJson(JsonWriter writer) throws IOException { |
|||
if (messageParts.size() == 1) { |
|||
latest().writeJson(writer); |
|||
} else { |
|||
writer.beginObject().name("text").value("").name("extra").beginArray(); |
|||
for (final MessagePart part : this) { |
|||
part.writeJson(writer); |
|||
} |
|||
writer.endArray().endObject(); |
|||
} |
|||
} |
|||
|
|||
public String toJSONString() { |
|||
if (!dirty && jsonString != null) { |
|||
return jsonString; |
|||
} |
|||
StringWriter string = new StringWriter(); |
|||
JsonWriter json = new JsonWriter(string); |
|||
try { |
|||
writeJson(json); |
|||
json.close(); |
|||
} catch (IOException e) { |
|||
throw new RuntimeException("invalid message"); |
|||
} |
|||
jsonString = string.toString(); |
|||
dirty = false; |
|||
return jsonString; |
|||
} |
|||
|
|||
public void send(Player player) { |
|||
send(player, toJSONString()); |
|||
} |
|||
|
|||
private void send(CommandSender sender, String jsonString) { |
|||
if (!(sender instanceof Player)) { |
|||
sender.sendMessage(toOldMessageFormat()); |
|||
return; |
|||
} |
|||
Player player = (Player) sender; |
|||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + jsonString); |
|||
} |
|||
|
|||
public void send(CommandSender sender) { |
|||
send(sender, toJSONString()); |
|||
} |
|||
|
|||
public void send(final Iterable<? extends CommandSender> senders) { |
|||
String string = toJSONString(); |
|||
for (final CommandSender sender : senders) { |
|||
send(sender, string); |
|||
} |
|||
} |
|||
|
|||
public String toOldMessageFormat() { |
|||
StringBuilder result = new StringBuilder(); |
|||
for (MessagePart part : this) { |
|||
result.append(part.color == null ? "" : part.color); |
|||
for (ChatColor formatSpecifier : part.styles) { |
|||
result.append(formatSpecifier); |
|||
} |
|||
result.append(part.text); |
|||
} |
|||
return result.toString(); |
|||
} |
|||
|
|||
private MessagePart latest() { |
|||
return messageParts.get(messageParts.size() - 1); |
|||
} |
|||
|
|||
private void onClick(final String name, final String data) { |
|||
final MessagePart latest = latest(); |
|||
latest.clickActionName = name; |
|||
latest.clickActionData = data; |
|||
dirty = true; |
|||
} |
|||
|
|||
private void onHover(final String name, final JsonRepresentedObject data) { |
|||
final MessagePart latest = latest(); |
|||
latest.hoverActionName = name; |
|||
latest.hoverActionData = data; |
|||
dirty = true; |
|||
} |
|||
|
|||
public Map<String, Object> serialize() { |
|||
HashMap<String, Object> map = new HashMap<String, Object>(); |
|||
map.put("messageParts", messageParts); |
|||
return map; |
|||
} |
|||
|
|||
@SuppressWarnings("unchecked") |
|||
public static FancyMessage deserialize(Map<String, Object> serialized) { |
|||
FancyMessage msg = new FancyMessage(); |
|||
msg.messageParts = (List<MessagePart>) serialized.get("messageParts"); |
|||
msg.jsonString = serialized.containsKey("JSON") ? serialized.get("JSON").toString() : null; |
|||
msg.dirty = !serialized.containsKey("JSON"); |
|||
return msg; |
|||
} |
|||
|
|||
public Iterator<MessagePart> iterator() { |
|||
return messageParts.iterator(); |
|||
} |
|||
|
|||
private static JsonParser _stringParser = new JsonParser(); |
|||
|
|||
public static FancyMessage deserialize(String json) { |
|||
JsonObject serialized = _stringParser.parse(json).getAsJsonObject(); |
|||
JsonArray extra = serialized.getAsJsonArray("extra"); |
|||
FancyMessage returnVal = new FancyMessage(); |
|||
returnVal.messageParts.clear(); |
|||
for (JsonElement mPrt : extra) { |
|||
MessagePart component = new MessagePart(); |
|||
JsonObject messagePart = mPrt.getAsJsonObject(); |
|||
for (Map.Entry<String, JsonElement> entry : messagePart.entrySet()) { |
|||
if (TextualComponent.isTextKey(entry.getKey())) { |
|||
Map<String, Object> serializedMapForm = new HashMap<String, Object>(); |
|||
serializedMapForm.put("key", entry.getKey()); |
|||
if (entry.getValue().isJsonPrimitive()) { |
|||
serializedMapForm.put("value", entry.getValue().getAsString()); |
|||
} else { |
|||
for (Map.Entry<String, JsonElement> compositeNestedElement : entry.getValue().getAsJsonObject().entrySet()) { |
|||
serializedMapForm.put("value." + compositeNestedElement.getKey(), compositeNestedElement.getValue().getAsString()); |
|||
} |
|||
} |
|||
component.text = TextualComponent.deserialize(serializedMapForm); |
|||
} else if (MessagePart.stylesToNames.inverse().containsKey(entry.getKey())) { |
|||
if (entry.getValue().getAsBoolean()) { |
|||
component.styles.add(MessagePart.stylesToNames.inverse().get(entry.getKey())); |
|||
} |
|||
} else if (entry.getKey().equals("color")) { |
|||
component.color = ChatColor.valueOf(entry.getValue().getAsString().toUpperCase()); |
|||
} else if (entry.getKey().equals("clickEvent")) { |
|||
JsonObject object = entry.getValue().getAsJsonObject(); |
|||
component.clickActionName = object.get("action").getAsString(); |
|||
component.clickActionData = object.get("value").getAsString(); |
|||
} else if (entry.getKey().equals("hoverEvent")) { |
|||
JsonObject object = entry.getValue().getAsJsonObject(); |
|||
component.hoverActionName = object.get("action").getAsString(); |
|||
if (object.get("value").isJsonPrimitive()) { |
|||
component.hoverActionData = new JsonString(object.get("value").getAsString()); |
|||
} else { |
|||
component.hoverActionData = deserialize(object.get("value").toString() /* This should properly serialize the JSON object as a JSON string */); |
|||
} |
|||
} else if (entry.getKey().equals("insertion")) { |
|||
component.insertionData = entry.getValue().getAsString(); |
|||
} else if (entry.getKey().equals("with")) { |
|||
for (JsonElement object : entry.getValue().getAsJsonArray()) { |
|||
if (object.isJsonPrimitive()) { |
|||
component.translationReplacements.add(new JsonString(object.getAsString())); |
|||
} else { |
|||
component.translationReplacements.add(deserialize(object.toString())); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
returnVal.messageParts.add(component); |
|||
} |
|||
return returnVal; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,11 @@ |
|||
package cx.sfy.TheBridge.fanciful; |
|||
|
|||
import com.google.gson.stream.JsonWriter; |
|||
|
|||
import java.io.IOException; |
|||
|
|||
interface JsonRepresentedObject { |
|||
|
|||
public void writeJson(JsonWriter writer) throws IOException; |
|||
|
|||
} |
@ -0,0 +1,42 @@ |
|||
package cx.sfy.TheBridge.fanciful; |
|||
|
|||
import java.io.IOException; |
|||
import java.util.HashMap; |
|||
import java.util.Map; |
|||
|
|||
import com.google.gson.stream.JsonWriter; |
|||
import org.bukkit.configuration.serialization.ConfigurationSerializable; |
|||
|
|||
final class JsonString implements JsonRepresentedObject, ConfigurationSerializable { |
|||
|
|||
private String _value; |
|||
|
|||
public JsonString(CharSequence value) { |
|||
_value = value == null ? null : value.toString(); |
|||
} |
|||
|
|||
@Override |
|||
public void writeJson(JsonWriter writer) throws IOException { |
|||
writer.value(getValue()); |
|||
} |
|||
|
|||
public String getValue() { |
|||
return _value; |
|||
} |
|||
|
|||
public Map<String, Object> serialize() { |
|||
HashMap<String, Object> theSingleValue = new HashMap<String, Object>(); |
|||
theSingleValue.put("stringValue", _value); |
|||
return theSingleValue; |
|||
} |
|||
|
|||
public static JsonString deserialize(Map<String, Object> map) { |
|||
return new JsonString(map.get("stringValue").toString()); |
|||
} |
|||
|
|||
@Override |
|||
public String toString() { |
|||
return _value; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,152 @@ |
|||
package cx.sfy.TheBridge.fanciful; |
|||
|
|||
import com.google.common.collect.BiMap; |
|||
import com.google.common.collect.ImmutableBiMap; |
|||
import com.google.gson.stream.JsonWriter; |
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.ChatColor; |
|||
import org.bukkit.configuration.serialization.ConfigurationSerializable; |
|||
import org.bukkit.configuration.serialization.ConfigurationSerialization; |
|||
|
|||
import java.io.IOException; |
|||
import java.util.ArrayList; |
|||
import java.util.HashMap; |
|||
import java.util.Map; |
|||
import java.util.logging.Level; |
|||
|
|||
final class MessagePart implements JsonRepresentedObject, ConfigurationSerializable, Cloneable { |
|||
|
|||
ChatColor color = ChatColor.WHITE; |
|||
ArrayList<ChatColor> styles = new ArrayList<ChatColor>(); |
|||
String clickActionName = null, clickActionData = null, hoverActionName = null; |
|||
JsonRepresentedObject hoverActionData = null; |
|||
TextualComponent text = null; |
|||
String insertionData = null; |
|||
ArrayList<JsonRepresentedObject> translationReplacements = new ArrayList<JsonRepresentedObject>(); |
|||
|
|||
MessagePart(final TextualComponent text) { |
|||
this.text = text; |
|||
} |
|||
|
|||
MessagePart() { |
|||
this.text = null; |
|||
} |
|||
|
|||
boolean hasText() { |
|||
return text != null; |
|||
} |
|||
|
|||
@Override |
|||
@SuppressWarnings("unchecked") |
|||
public MessagePart clone() throws CloneNotSupportedException { |
|||
MessagePart obj = (MessagePart) super.clone(); |
|||
obj.styles = (ArrayList<ChatColor>) styles.clone(); |
|||
if (hoverActionData instanceof JsonString) { |
|||
obj.hoverActionData = new JsonString(((JsonString) hoverActionData).getValue()); |
|||
} else if (hoverActionData instanceof FancyMessage) { |
|||
obj.hoverActionData = ((FancyMessage) hoverActionData).clone(); |
|||
} |
|||
obj.translationReplacements = (ArrayList<JsonRepresentedObject>) translationReplacements.clone(); |
|||
return obj; |
|||
|
|||
} |
|||
|
|||
static final BiMap<ChatColor, String> stylesToNames; |
|||
|
|||
static { |
|||
ImmutableBiMap.Builder<ChatColor, String> builder = ImmutableBiMap.builder(); |
|||
for (final ChatColor style : ChatColor.values()) { |
|||
if (!style.isFormat()) { |
|||
continue; |
|||
} |
|||
|
|||
String styleName; |
|||
switch (style) { |
|||
case MAGIC: |
|||
styleName = "obfuscated"; |
|||
break; |
|||
case UNDERLINE: |
|||
styleName = "underlined"; |
|||
break; |
|||
default: |
|||
styleName = style.name().toLowerCase(); |
|||
break; |
|||
} |
|||
|
|||
builder.put(style, styleName); |
|||
} |
|||
stylesToNames = builder.build(); |
|||
} |
|||
|
|||
public void writeJson(JsonWriter json) { |
|||
try { |
|||
json.beginObject(); |
|||
text.writeJson(json); |
|||
json.name("color").value(color.name().toLowerCase()); |
|||
for (final ChatColor style : styles) { |
|||
json.name(stylesToNames.get(style)).value(true); |
|||
} |
|||
if (clickActionName != null && clickActionData != null) { |
|||
json.name("clickEvent") |
|||
.beginObject() |
|||
.name("action").value(clickActionName) |
|||
.name("value").value(clickActionData) |
|||
.endObject(); |
|||
} |
|||
if (hoverActionName != null && hoverActionData != null) { |
|||
json.name("hoverEvent") |
|||
.beginObject() |
|||
.name("action").value(hoverActionName) |
|||
.name("value"); |
|||
hoverActionData.writeJson(json); |
|||
json.endObject(); |
|||
} |
|||
if (insertionData != null) { |
|||
json.name("insertion").value(insertionData); |
|||
} |
|||
if (translationReplacements.size() > 0 && text != null && TextualComponent.isTranslatableText(text)) { |
|||
json.name("with").beginArray(); |
|||
for (JsonRepresentedObject obj : translationReplacements) { |
|||
obj.writeJson(json); |
|||
} |
|||
json.endArray(); |
|||
} |
|||
json.endObject(); |
|||
} catch (IOException e) { |
|||
Bukkit.getLogger().log(Level.WARNING, "A problem occured during writing of JSON string", e); |
|||
} |
|||
} |
|||
|
|||
public Map<String, Object> serialize() { |
|||
HashMap<String, Object> map = new HashMap<String, Object>(); |
|||
map.put("text", text); |
|||
map.put("styles", styles); |
|||
map.put("color", color.getChar()); |
|||
map.put("hoverActionName", hoverActionName); |
|||
map.put("hoverActionData", hoverActionData); |
|||
map.put("clickActionName", clickActionName); |
|||
map.put("clickActionData", clickActionData); |
|||
map.put("insertion", insertionData); |
|||
map.put("translationReplacements", translationReplacements); |
|||
return map; |
|||
} |
|||
|
|||
@SuppressWarnings("unchecked") |
|||
public static MessagePart deserialize(Map<String, Object> serialized) { |
|||
MessagePart part = new MessagePart((TextualComponent) serialized.get("text")); |
|||
part.styles = (ArrayList<ChatColor>) serialized.get("styles"); |
|||
part.color = ChatColor.getByChar(serialized.get("color").toString()); |
|||
part.hoverActionName = (String) serialized.get("hoverActionName"); |
|||
part.hoverActionData = (JsonRepresentedObject) serialized.get("hoverActionData"); |
|||
part.clickActionName = (String) serialized.get("clickActionName"); |
|||
part.clickActionData = (String) serialized.get("clickActionData"); |
|||
part.insertionData = (String) serialized.get("insertion"); |
|||
part.translationReplacements = (ArrayList<JsonRepresentedObject>) serialized.get("translationReplacements"); |
|||
return part; |
|||
} |
|||
|
|||
static { |
|||
ConfigurationSerialization.registerClass(MessagePart.class); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,211 @@ |
|||
package cx.sfy.TheBridge.fanciful; |
|||
|
|||
import com.google.common.base.Preconditions; |
|||
import com.google.common.collect.ImmutableMap; |
|||
import com.google.gson.stream.JsonWriter; |
|||
import org.bukkit.configuration.serialization.ConfigurationSerializable; |
|||
import org.bukkit.configuration.serialization.ConfigurationSerialization; |
|||
|
|||
import java.io.IOException; |
|||
import java.util.HashMap; |
|||
import java.util.Map; |
|||
|
|||
public abstract class TextualComponent implements Cloneable { |
|||
|
|||
static { |
|||
ConfigurationSerialization.registerClass(TextualComponent.ArbitraryTextTypeComponent.class); |
|||
ConfigurationSerialization.registerClass(TextualComponent.ComplexTextTypeComponent.class); |
|||
} |
|||
|
|||
@Override |
|||
public String toString() { |
|||
return getReadableString(); |
|||
} |
|||
|
|||
public abstract String getKey(); |
|||
|
|||
public abstract String getReadableString(); |
|||
|
|||
@Override |
|||
public abstract TextualComponent clone() throws CloneNotSupportedException; |
|||
|
|||
public abstract void writeJson(JsonWriter writer) throws IOException; |
|||
|
|||
static TextualComponent deserialize(Map<String, Object> map) { |
|||
if (map.containsKey("key") && map.size() == 2 && map.containsKey("value")) { |
|||
return ArbitraryTextTypeComponent.deserialize(map); |
|||
} else if (map.size() >= 2 && map.containsKey("key") && !map.containsKey("value")) { |
|||
return ComplexTextTypeComponent.deserialize(map); |
|||
} |
|||
|
|||
return null; |
|||
} |
|||
|
|||
static boolean isTextKey(String key) { |
|||
return key.equals("translate") || key.equals("text") || key.equals("score") || key.equals("selector"); |
|||
} |
|||
|
|||
static boolean isTranslatableText(TextualComponent component) { |
|||
return component instanceof ComplexTextTypeComponent && ((ComplexTextTypeComponent) component).getKey().equals("translate"); |
|||
} |
|||
|
|||
private static final class ArbitraryTextTypeComponent extends TextualComponent implements ConfigurationSerializable { |
|||
|
|||
public ArbitraryTextTypeComponent(String key, String value) { |
|||
setKey(key); |
|||
setValue(value); |
|||
} |
|||
|
|||
@Override |
|||
public String getKey() { |
|||
return _key; |
|||
} |
|||
|
|||
public void setKey(String key) { |
|||
Preconditions.checkArgument(key != null && !key.isEmpty(), "The key must be specified."); |
|||
_key = key; |
|||
} |
|||
|
|||
public String getValue() { |
|||
return _value; |
|||
} |
|||
|
|||
public void setValue(String value) { |
|||
Preconditions.checkArgument(value != null, "The value must be specified."); |
|||
_value = value; |
|||
} |
|||
|
|||
private String _key; |
|||
private String _value; |
|||
|
|||
@Override |
|||
public TextualComponent clone() throws CloneNotSupportedException { |
|||
return new ArbitraryTextTypeComponent(getKey(), getValue()); |
|||
} |
|||
|
|||
@Override |
|||
public void writeJson(JsonWriter writer) throws IOException { |
|||
writer.name(getKey()).value(getValue()); |
|||
} |
|||
|
|||
@SuppressWarnings("serial") |
|||
public Map<String, Object> serialize() { |
|||
return new HashMap<String, Object>() {{ |
|||
put("key", getKey()); |
|||
put("value", getValue()); |
|||
}}; |
|||
} |
|||
|
|||
public static ArbitraryTextTypeComponent deserialize(Map<String, Object> map) { |
|||
return new ArbitraryTextTypeComponent(map.get("key").toString(), map.get("value").toString()); |
|||
} |
|||
|
|||
@Override |
|||
public String getReadableString() { |
|||
return getValue(); |
|||
} |
|||
} |
|||
|
|||
private static final class ComplexTextTypeComponent extends TextualComponent implements ConfigurationSerializable { |
|||
|
|||
public ComplexTextTypeComponent(String key, Map<String, String> values) { |
|||
setKey(key); |
|||
setValue(values); |
|||
} |
|||
|
|||
@Override |
|||
public String getKey() { |
|||
return _key; |
|||
} |
|||
|
|||
public void setKey(String key) { |
|||
Preconditions.checkArgument(key != null && !key.isEmpty(), "The key must be specified."); |
|||
_key = key; |
|||
} |
|||
|
|||
public Map<String, String> getValue() { |
|||
return _value; |
|||
} |
|||
|
|||
public void setValue(Map<String, String> value) { |
|||
Preconditions.checkArgument(value != null, "The value must be specified."); |
|||
_value = value; |
|||
} |
|||
|
|||
private String _key; |
|||
private Map<String, String> _value; |
|||
|
|||
@Override |
|||
public TextualComponent clone() throws CloneNotSupportedException { |
|||
return new ComplexTextTypeComponent(getKey(), getValue()); |
|||
} |
|||
|
|||
@Override |
|||
public void writeJson(JsonWriter writer) throws IOException { |
|||
writer.name(getKey()); |
|||
writer.beginObject(); |
|||
for (Map.Entry<String, String> jsonPair : _value.entrySet()) { |
|||
writer.name(jsonPair.getKey()).value(jsonPair.getValue()); |
|||
} |
|||
writer.endObject(); |
|||
} |
|||
|
|||
@SuppressWarnings("serial") |
|||
public Map<String, Object> serialize() { |
|||
return new java.util.HashMap<String, Object>() {{ |
|||
put("key", getKey()); |
|||
for (Map.Entry<String, String> valEntry : getValue().entrySet()) { |
|||
put("value." + valEntry.getKey(), valEntry.getValue()); |
|||
} |
|||
}}; |
|||
} |
|||
|
|||
public static ComplexTextTypeComponent deserialize(Map<String, Object> map) { |
|||
String key = null; |
|||
Map<String, String> value = new HashMap<String, String>(); |
|||
for (Map.Entry<String, Object> valEntry : map.entrySet()) { |
|||
if (valEntry.getKey().equals("key")) { |
|||
key = (String) valEntry.getValue(); |
|||
} else if (valEntry.getKey().startsWith("value.")) { |
|||
value.put(((String) valEntry.getKey()).substring(6), valEntry.getValue().toString()); |
|||
} |
|||
} |
|||
return new ComplexTextTypeComponent(key, value); |
|||
} |
|||
|
|||
@Override |
|||
public String getReadableString() { |
|||
return getKey(); |
|||
} |
|||
} |
|||
|
|||
public static TextualComponent rawText(String textValue) { |
|||
return new ArbitraryTextTypeComponent("text", textValue); |
|||
} |
|||
|
|||
public static TextualComponent localizedText(String translateKey) { |
|||
return new ArbitraryTextTypeComponent("translate", translateKey); |
|||
} |
|||
|
|||
private static void throwUnsupportedSnapshot() { |
|||
throw new UnsupportedOperationException("This feature is only supported in snapshot releases."); |
|||
} |
|||
|
|||
public static TextualComponent objectiveScore(String scoreboardObjective) { |
|||
return objectiveScore("*", scoreboardObjective); |
|||
} |
|||
|
|||
public static TextualComponent objectiveScore(String playerName, String scoreboardObjective) { |
|||
throwUnsupportedSnapshot(); |
|||
return new ComplexTextTypeComponent("score", ImmutableMap.<String, String>builder() |
|||
.put("name", playerName) |
|||
.put("objective", scoreboardObjective) |
|||
.build()); |
|||
} |
|||
|
|||
public static TextualComponent selector(String selector) { |
|||
throwUnsupportedSnapshot(); |
|||
return new ArbitraryTextTypeComponent("selector", selector); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,753 @@ |
|||
package cx.sfy.TheBridge.game; |
|||
|
|||
import java.text.DecimalFormat; |
|||
import java.util.ArrayList; |
|||
import java.util.HashMap; |
|||
import java.util.Random; |
|||
|
|||
import org.bukkit.ChatColor; |
|||
import org.bukkit.Color; |
|||
import org.bukkit.FireworkEffect; |
|||
import org.bukkit.GameMode; |
|||
import org.bukkit.Location; |
|||
import org.bukkit.Material; |
|||
import org.bukkit.Sound; |
|||
import org.bukkit.entity.Firework; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.inventory.ItemStack; |
|||
import org.bukkit.inventory.meta.FireworkMeta; |
|||
import org.bukkit.inventory.meta.ItemMeta; |
|||
import org.bukkit.inventory.meta.LeatherArmorMeta; |
|||
import org.bukkit.scheduler.BukkitRunnable; |
|||
import org.bukkit.scheduler.BukkitTask; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.database.PlayerStat; |
|||
import cx.sfy.TheBridge.hologram.TruenoHologram; |
|||
import cx.sfy.TheBridge.hologram.TruenoHologramAPI; |
|||
import cx.sfy.TheBridge.team.Team; |
|||
import cx.sfy.TheBridge.utils.CenterMessage; |
|||
import cx.sfy.TheBridge.utils.ItemBuilder; |
|||
import cx.sfy.TheBridge.utils.Utils; |
|||
|
|||
public class Game { |
|||
|
|||
private final Main plugin; |
|||
private final HashMap<ChatColor, Team> teams; |
|||
private final HashMap<Player, ChatColor> teamPlayer; |
|||
private final ArrayList<Player> players; |
|||
private final HashMap<Player, PlayerData> pd = new HashMap<>(); |
|||
private final HashMap<Player, Integer> goals = new HashMap<>(); |
|||
private final HashMap<Player, Integer> kills = new HashMap<>(); |
|||
private final ArrayList<TruenoHologram> holograms = new ArrayList<>(); |
|||
private final ArrayList<Location> build = new ArrayList<>(); |
|||
private final ArrayList<Location> placed = new ArrayList<>(); |
|||
private final String name; |
|||
private final String mode; |
|||
private final int min; |
|||
private final int max; |
|||
private final int teamSize; |
|||
private int starting; |
|||
private int prestart; |
|||
private int restart; |
|||
private final Location lobby; |
|||
private final Location spect; |
|||
private BukkitTask start; |
|||
private BukkitTask prestarts; |
|||
private State state; |
|||
int time = 0; |
|||
int tick = 0; |
|||
|
|||
public Game(Main plugin, String name, int min, int max, int teamSize, int starting, int prestart, int restart, |
|||
Location lobby, Location spect, Location buildMin, Location buildMax, Location spawnsRed, |
|||
Location spawnsBlue, ArrayList<Location> portalRed, ArrayList<Location> portalBlue, Location respawnsRed, |
|||
Location respawnsBlue, Location hRed, Location hBlue) { |
|||
this.plugin = plugin; |
|||
this.starting = starting; |
|||
this.prestart = prestart; |
|||
this.restart = restart; |
|||
this.max = max; |
|||
this.min = min; |
|||
this.teamSize = teamSize; |
|||
this.mode = teamSize + "v" + teamSize; |
|||
this.name = name; |
|||
this.lobby = lobby; |
|||
this.spect = spect; |
|||
this.teamPlayer = new HashMap<>(); |
|||
this.teams = new HashMap<>(); |
|||
this.players = new ArrayList<>(); |
|||
final int gn = Math.min(buildMin.getBlockX(), buildMax.getBlockX()); |
|||
final int gn2 = Math.max(buildMin.getBlockX(), buildMax.getBlockX()); |
|||
final int gn3 = Math.min(buildMin.getBlockZ(), buildMax.getBlockZ()); |
|||
final int gn4 = Math.max(buildMin.getBlockZ(), buildMax.getBlockZ()); |
|||
final int gn5 = Math.min(buildMin.getBlockY(), buildMax.getBlockY()); |
|||
final int gn6 = Math.max(buildMin.getBlockY(), buildMax.getBlockY()); |
|||
for (int i = gn; i <= gn2; ++i) |
|||
for (int j = gn5; j <= gn6; ++j) |
|||
for (int k = gn3; k <= gn4; ++k) { |
|||
final Location location3 = new Location(buildMin.getWorld(), i, j, k); |
|||
build.add(location3); |
|||
} |
|||
this.teams.put(ChatColor.BLUE, new Team(plugin.getConfig().getString("names.blue"), ChatColor.BLUE, Color.BLUE, |
|||
respawnsBlue, spawnsBlue, portalBlue, hBlue)); |
|||
this.teams.put(ChatColor.RED, new Team(plugin.getConfig().getString("names.red"), ChatColor.RED, Color.RED, |
|||
respawnsRed, spawnsRed, portalRed, hRed)); |
|||
setState(State.WAITING); |
|||
updateSign(); |
|||
} |
|||
|
|||
public void checkCancel() { |
|||
if (isState(State.STARTING) && players.size() <= getMin()) { |
|||
if (start != null) |
|||
start.cancel(); |
|||
if (prestarts != null) |
|||
prestarts.cancel(); |
|||
setState(State.WAITING); |
|||
starting = 30; |
|||
updateSign(); |
|||
for (final Player on : players) |
|||
updateSB(on); |
|||
} |
|||
} |
|||
|
|||
public void updateSB(Player p) { |
|||
plugin.getSB().update(p); |
|||
} |
|||
|
|||
public void updateSign() { |
|||
plugin.getSIM().updateGameSign(this); |
|||
} |
|||
|
|||
public void addPlayer(Player p) { |
|||
pd.put(p, new PlayerData(p)); |
|||
Utils.setCleanPlayer(p); |
|||
players.add(p); |
|||
kills.put(p, 0); |
|||
goals.put(p, 0); |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
givePlayerItems(p); |
|||
} |
|||
}.runTaskLater(plugin, 20); |
|||
p.teleport(getLobby()); |
|||
updateSign(); |
|||
if (isState(State.WAITING) || isState(State.STARTING)) |
|||
for (final Player on : players) { |
|||
on.sendMessage(plugin.getLang().get("messages.join").replaceAll("<player>", p.getName()) |
|||
.replaceAll("<players>", String.valueOf(players.size())) |
|||
.replaceAll("<max>", String.valueOf(getMax()))); |
|||
on.playSound(on.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.join")), 1.0f, 1.0f); |
|||
updateSB(on); |
|||
} |
|||
} |
|||
|
|||
public void removePlayer(Player p) { |
|||
Utils.setCleanPlayer(p); |
|||
pd.get(p).restore(); |
|||
removeAllPlayerTeam(p); |
|||
players.remove(p); |
|||
if (isState(State.WAITING) || isState(State.STARTING)) |
|||
for (final Player on : players) { |
|||
on.sendMessage(plugin.getLang().get("messages.quit").replaceAll("<player>", p.getName()) |
|||
.replaceAll("<players>", String.valueOf(players.size())) |
|||
.replaceAll("<max>", String.valueOf(getMax()))); |
|||
on.playSound(on.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.quit")), 1.0f, 1.0f); |
|||
updateSB(on); |
|||
} |
|||
else if (getTeamsAlive() == 1 && players.size() >= 1) |
|||
checkWin(p, getLastTeam(), getLastTeam().getGoals()); |
|||
updateSign(); |
|||
checkCancel(); |
|||
} |
|||
|
|||
// FIXME: Not properly giving coins
|
|||
public boolean checkWin(Player w, Team team, int goals) { |
|||
if (isState(State.FINISH)) |
|||
return false; |
|||
final DecimalFormat df = new DecimalFormat("#.##"); |
|||
if (getTeamsAlive() <= 1 && players.size() >= 1) { |
|||
final Team win = getLastTeam(); |
|||
setState(State.FINISH); |
|||
firework(getSpect(), win.getFColor()); |
|||
for (final Player r : win.getTeamPlayers()) |
|||
PlayerStat.getPlayerStat(r).addNormalWins(); |
|||
for (final Player p : players) { |
|||
p.teleport(lobby); |
|||
updateSB(p); |
|||
plugin.getNMS().sendTitle(p, 0, 60, 0, |
|||
plugin.getLang().get("titles.win.title") |
|||
.replaceAll("<blueGoals>", String.valueOf(teams.get(ChatColor.BLUE).getGoals())) |
|||
.replaceAll("<redGoals>", String.valueOf(teams.get(ChatColor.RED).getGoals())) |
|||
.replaceAll("<team>", team.getTeamName()).replaceAll("<color>", team.getColor() + ""), |
|||
plugin.getLang().get("titles.win.subtitle") |
|||
.replaceAll("<blueGoals>", String.valueOf(teams.get(ChatColor.BLUE).getGoals())) |
|||
.replaceAll("<redGoals>", String.valueOf(teams.get(ChatColor.RED).getGoals())) |
|||
.replaceAll("<team>", team.getTeamName()).replaceAll("<color>", team.getColor() + "")); |
|||
for (final String msg : plugin.getLang().getList("messages.win")) |
|||
CenterMessage.sendCenteredMessage(p, |
|||
msg.replaceAll("&", "§").replaceAll("<player>", w.getName()) |
|||
.replaceAll("<blueGoals>", String.valueOf(teams.get(ChatColor.BLUE).getGoals())) |
|||
.replaceAll("<redGoals>", String.valueOf(teams.get(ChatColor.RED).getGoals())) |
|||
.replaceAll("<s>", getGoals(w) > 1 ? "es" : "") |
|||
.replaceAll("<goals>", String.valueOf(getGoals(w))) |
|||
.replaceAll("<health>", df.format(w.getHealth())).replaceAll("<heart>", "❤") |
|||
.replaceAll("<color>", "" + team.getColor()) |
|||
.replaceAll("<team>", win.getTeamName().toUpperCase())); |
|||
} |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
for (final TruenoHologram th : holograms) |
|||
th.delete(); |
|||
for (final Player p : spect.getWorld().getPlayers()) |
|||
if (pd.containsKey(p)) |
|||
plugin.getGM().removePlayerAllGames(p); |
|||
else |
|||
p.teleport(plugin.getMainLobby()); |
|||
} |
|||
}.runTaskLater(plugin, 20 * 10); |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
plugin.getGM().resetNormalGame(getName()); |
|||
} |
|||
}.runTaskLater(plugin, 20 * 12); |
|||
updateSign(); |
|||
return true; |
|||
} |
|||
if (team.getGoals() >= goals) { |
|||
setState(State.FINISH); |
|||
final Team win = getLastTeam(); |
|||
firework(getSpect(), team.getFColor()); |
|||
for (final Player r : win.getTeamPlayers()) |
|||
PlayerStat.getPlayerStat(r).addNormalWins(); |
|||
for (final Player p : players) { |
|||
p.teleport(lobby); |
|||
plugin.getNMS().sendTitle(p, 0, 60, 0, |
|||
plugin.getLang().get("titles.win.title") |
|||
.replaceAll("<blueGoals>", String.valueOf(teams.get(ChatColor.BLUE).getGoals())) |
|||
.replaceAll("<redGoals>", String.valueOf(teams.get(ChatColor.RED).getGoals())) |
|||
.replaceAll("<team>", team.getTeamName()).replaceAll("<color>", team.getColor() + ""), |
|||
plugin.getLang().get("titles.win.subtitle") |
|||
.replaceAll("<blueGoals>", String.valueOf(teams.get(ChatColor.BLUE).getGoals())) |
|||
.replaceAll("<redGoals>", String.valueOf(teams.get(ChatColor.RED).getGoals())) |
|||
.replaceAll("<team>", team.getTeamName()).replaceAll("<color>", team.getColor() + "")); |
|||
for (final String msg : plugin.getLang().getList("messages.win")) |
|||
CenterMessage.sendCenteredMessage(p, |
|||
msg.replaceAll("&", "§").replaceAll("<player>", w.getName()) |
|||
.replaceAll("<blueGoals>", String.valueOf(teams.get(ChatColor.BLUE).getGoals())) |
|||
.replaceAll("<redGoals>", String.valueOf(teams.get(ChatColor.RED).getGoals())) |
|||
.replaceAll("<s>", getGoals(w) > 1 ? "es" : "") |
|||
.replaceAll("<goals>", String.valueOf(getGoals(w))) |
|||
.replaceAll("<health>", df.format(w.getHealth())).replaceAll("<heart>", "❤") |
|||
.replaceAll("<color>", "" + team.getColor()) |
|||
.replaceAll("<team>", team.getTeamName().toUpperCase())); |
|||
} |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
for (final Player p : spect.getWorld().getPlayers()) |
|||
if (pd.containsKey(p)) |
|||
plugin.getGM().removePlayerAllGames(p); |
|||
else |
|||
p.teleport(plugin.getMainLobby()); |
|||
} |
|||
}.runTaskLater(plugin, 20 * 10); |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
plugin.getGM().resetNormalGame(getName()); |
|||
} |
|||
}.runTaskLater(plugin, 20 * 12); |
|||
updateSign(); |
|||
return true; |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
public void celebrateGoal(Team team, Player e) { |
|||
restart = 5; |
|||
team.addGoal(); |
|||
addGoal(e); |
|||
PlayerStat.getPlayerStat(e).addNormalGoals(); |
|||
if (checkWin(e, team, 5)) |
|||
return; |
|||
firework(getSpect(), team.getFColor()); |
|||
if (plugin.isCage()) { |
|||
for (final Team te : teams.values()) |
|||
if (!te.isCage()) |
|||
if (te.getTeamPlayers().get(0) != null) { |
|||
te.createCage(plugin.getCM() |
|||
.getCageByName(PlayerStat.getPlayerStat(te.getTeamPlayers().get(0)).getCage())); |
|||
te.setCage(true); |
|||
} else { |
|||
te.createCage(plugin.getCM().getCageByName(plugin.getConfig().getString("defaultCage"))); |
|||
te.setCage(true); |
|||
} |
|||
} else |
|||
for (final ChatColor color : teams.keySet()) |
|||
plugin.getGLM().createCage(teams.get(color).getTeamSpawn(), color); |
|||
for (final Player p : players) { |
|||
p.teleport(getTeamPlayer(p).getTeamSpawn().clone().add(0, 1, 0)); |
|||
updateSB(p); |
|||
} |
|||
checkRestart(team, team.getColor(), e); |
|||
} |
|||
|
|||
public void firework(Location loc, Color c1) { |
|||
time = 0; |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
final Firework fa = loc.getWorld().spawn(loc.clone().add(new Random().nextInt(5) + 1, |
|||
new Random().nextInt(1) + 1, new Random().nextInt(5) + 1), Firework.class); |
|||
final FireworkMeta fam = fa.getFireworkMeta(); |
|||
final FireworkEffect.Type tipo = FireworkEffect.Type.STAR; |
|||
final Color c2 = Color.WHITE; |
|||
final FireworkEffect ef = FireworkEffect.builder().withColor(c1).withFade(c2).with(tipo).build(); |
|||
fam.addEffect(ef); |
|||
fam.setPower(0); |
|||
fa.setFireworkMeta(fam); |
|||
time++; |
|||
if (time == 10) |
|||
cancel(); |
|||
} |
|||
}.runTaskTimer(plugin, 0, 10); |
|||
} |
|||
|
|||
public void checkRestart(Team team, ChatColor color, Player e) { |
|||
final DecimalFormat df = new DecimalFormat("#.##"); |
|||
for (final Player p : players) { |
|||
Utils.setCleanPlayer(p); |
|||
p.setGameMode(GameMode.ADVENTURE); |
|||
giveKit(p, getTeamPlayer(p)); |
|||
for (final String msg : plugin.getLang().getList("messages.goal")) |
|||
CenterMessage.sendCenteredMessage(p, |
|||
msg.replaceAll("&", "§").replaceAll("<player>", e.getName()) |
|||
.replaceAll("<blueGoals>", String.valueOf(teams.get(ChatColor.BLUE).getGoals())) |
|||
.replaceAll("<redGoals>", String.valueOf(teams.get(ChatColor.RED).getGoals())) |
|||
.replaceAll("<s>", getGoals(e) > 1 ? "es" : "") |
|||
.replaceAll("<goals>", String.valueOf(getGoals(e))) |
|||
.replaceAll("<health>", df.format(e.getHealth())).replaceAll("<heart>", "❤") |
|||
.replaceAll("<color>", "" + team.getColor()) |
|||
.replaceAll("<team>", team.getTeamName().toUpperCase())); |
|||
} |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
if (restart == 10 || restart == 5 || restart == 4 || restart == 3 || restart == 2) |
|||
for (final Player p : players) { |
|||
p.sendMessage(plugin.getLang().get(p, "messages.restart").replaceAll("<color>", "" + color) |
|||
.replaceAll("<player>", e.getName()).replaceAll("<time>", String.valueOf(restart)) |
|||
.replaceAll("<s>", "s") |
|||
.replaceAll("<units>", plugin.getLang().get(p, "units.seconds"))); |
|||
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.restart")), 1.0f, |
|||
1.0f); |
|||
plugin.getTM().sendReStartTitle(e, p, restart, true); |
|||
} |
|||
if (restart == 1) |
|||
for (final Player p : players) { |
|||
p.sendMessage(plugin.getLang().get(p, "messages.restart").replaceAll("<color>", "" + color) |
|||
.replaceAll("<player>", e.getName()).replaceAll("<time>", String.valueOf(restart)) |
|||
.replaceAll("<s>", "").replaceAll("<units>", plugin.getLang().get(p, "units.second"))); |
|||
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.restart")), 1.0f, |
|||
1.0f); |
|||
plugin.getTM().sendReStartTitle(e, p, restart, false); |
|||
} |
|||
if (restart == 0) { |
|||
if (plugin.isCage()) { |
|||
for (final Team team : teams.values()) |
|||
if (team.isCage()) { |
|||
team.removeCage(); |
|||
team.setCage(false); |
|||
} |
|||
} else |
|||
for (final ChatColor color : teams.keySet()) |
|||
plugin.getGLM().removeGlass(teams.get(color).getTeamSpawn()); |
|||
for (final Player p : players) |
|||
p.setGameMode(GameMode.SURVIVAL); |
|||
cancel(); |
|||
} |
|||
restart--; |
|||
} |
|||
}.runTaskTimer(get(), 0, 20); |
|||
} |
|||
|
|||
public void updateGame() { |
|||
tick++; |
|||
if (isState(State.WAITING) && players.size() >= getMin()) { |
|||
setState(State.STARTING); |
|||
updateSign(); |
|||
for (final Player p : players) |
|||
p.setGameMode(GameMode.ADVENTURE); |
|||
} |
|||
if (isState(State.STARTING)) { |
|||
if (tick % 20 == 0) |
|||
for (final Player p : players) |
|||
updateSB(p); |
|||
if (starting == 240 || starting == 180 || starting == 120) |
|||
for (final Player p : players) { |
|||
p.sendMessage(plugin.getLang().get(p, "messages.starting") |
|||
.replaceAll("<time>", String.valueOf(starting / 60)) |
|||
.replaceAll("<units>", plugin.getLang().get(p, "units.minutes"))); |
|||
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.starting")), 1.0f, |
|||
1.0f); |
|||
plugin.getTM().sendStartTitle(p, starting, true); |
|||
} |
|||
else if (starting == 60) |
|||
for (final Player p : players) { |
|||
p.sendMessage(plugin.getLang().get(p, "messages.starting") |
|||
.replaceAll("<time>", String.valueOf(starting / 60)) |
|||
.replaceAll("<units>", plugin.getLang().get(p, "units.minute"))); |
|||
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.starting")), 1.0f, |
|||
1.0f); |
|||
plugin.getTM().sendStartTitle(p, starting, true); |
|||
} |
|||
else if (starting == 30 || starting == 15 || starting == 10 || starting == 5 || starting == 4 |
|||
|| starting == 3 || starting == 2) |
|||
for (final Player p : players) { |
|||
p.sendMessage( |
|||
plugin.getLang().get(p, "messages.starting").replaceAll("<time>", String.valueOf(starting)) |
|||
.replaceAll("<units>", plugin.getLang().get(p, "units.seconds"))); |
|||
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.starting")), 1.0f, |
|||
1.0f); |
|||
plugin.getTM().sendStartTitle(p, starting, true); |
|||
} |
|||
else if (starting == 1) { |
|||
setState(State.PREGAME); |
|||
updateSign(); |
|||
for (final Player p : players) { |
|||
p.sendMessage( |
|||
plugin.getLang().get(p, "messages.starting").replaceAll("<time>", String.valueOf(starting)) |
|||
.replaceAll("<units>", plugin.getLang().get(p, "units.second"))); |
|||
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.starting")), 1.0f, |
|||
1.0f); |
|||
plugin.getTM().sendStartTitle(p, starting, false); |
|||
if (getTeamPlayer(p) == null) |
|||
addRandomTeam(p); |
|||
p.getInventory().clear(); |
|||
} |
|||
if (plugin.isCage()) { |
|||
for (final Team team : teams.values()) |
|||
if (!team.isCage()) |
|||
if (team.getTeamPlayers().get(0) != null) { |
|||
team.createCage(plugin.getCM().getCageByName( |
|||
PlayerStat.getPlayerStat(team.getTeamPlayers().get(0)).getCage())); |
|||
team.setCage(true); |
|||
} else { |
|||
team.createCage( |
|||
plugin.getCM().getCageByName(plugin.getConfig().getString("defaultCage"))); |
|||
team.setCage(true); |
|||
} |
|||
} else |
|||
for (final ChatColor color : teams.keySet()) |
|||
plugin.getGLM().createCage(teams.get(color).getTeamSpawn(), color); |
|||
for (final Player p : players) { |
|||
p.teleport(getTeamPlayer(p).getTeamSpawn().clone().add(0, 1, 0)); |
|||
giveKit(p, getTeamPlayer(p)); |
|||
} |
|||
final Location hRed = teams.get(ChatColor.RED).getHologram(); |
|||
final Location hBlue = teams.get(ChatColor.BLUE).getHologram(); |
|||
if (hRed != null && hBlue != null) { |
|||
for (final Player p : teams.get(ChatColor.RED).getTeamPlayers()) { |
|||
final ArrayList<String> pRed = new ArrayList<>(); |
|||
final TruenoHologram phRed = TruenoHologramAPI.getNewHologram(); |
|||
for (final String portal : plugin.getLang().getList("holograms.portal.you")) |
|||
pRed.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.RED) |
|||
.replaceAll("<team>", plugin.getLang().get("holograms.your"))); |
|||
final ArrayList<String> pBlue = new ArrayList<>(); |
|||
final TruenoHologram phBlue = TruenoHologramAPI.getNewHologram(); |
|||
for (final String portal : plugin.getLang().getList("holograms.portal.enemy")) |
|||
pBlue.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.BLUE) |
|||
.replaceAll("<team>", teams.get(ChatColor.BLUE).getTeamName())); |
|||
phBlue.setupPlayerHologram(p, hBlue, pBlue); |
|||
phBlue.display(); |
|||
phRed.setupPlayerHologram(p, hRed, pRed); |
|||
phRed.display(); |
|||
holograms.add(phRed); |
|||
holograms.add(phBlue); |
|||
} |
|||
for (final Player p : teams.get(ChatColor.BLUE).getTeamPlayers()) { |
|||
final ArrayList<String> pRed = new ArrayList<>(); |
|||
final TruenoHologram phRed = TruenoHologramAPI.getNewHologram(); |
|||
for (final String portal : plugin.getLang().getList("holograms.portal.you")) |
|||
pRed.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.BLUE) |
|||
.replaceAll("<team>", plugin.getLang().get("holograms.your"))); |
|||
final ArrayList<String> pBlue = new ArrayList<>(); |
|||
final TruenoHologram phBlue = TruenoHologramAPI.getNewHologram(); |
|||
for (final String portal : plugin.getLang().getList("holograms.portal.enemy")) |
|||
pBlue.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.RED) |
|||
.replaceAll("<team>", teams.get(ChatColor.RED).getTeamName())); |
|||
phBlue.setupPlayerHologram(p, hRed, pBlue); |
|||
phBlue.display(); |
|||
phRed.setupPlayerHologram(p, hBlue, pRed); |
|||
phRed.display(); |
|||
holograms.add(phRed); |
|||
holograms.add(phBlue); |
|||
} |
|||
} |
|||
teams.get(ChatColor.RED).createPortal(); |
|||
teams.get(ChatColor.BLUE).createPortal(); |
|||
} |
|||
starting--; |
|||
} |
|||
if (isState(State.PREGAME)) { |
|||
if (prestart == 10 || prestart == 5 || prestart == 4 || prestart == 3 || prestart == 2) |
|||
for (final Player p : players) { |
|||
p.sendMessage( |
|||
plugin.getLang().get(p, "messages.prestart").replaceAll("<time>", String.valueOf(prestart)) |
|||
.replaceAll("<units>", plugin.getLang().get(p, "units.seconds"))); |
|||
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.prestart")), 1.0f, |
|||
1.0f); |
|||
plugin.getTM().sendPreTitle(p, prestart, true); |
|||
updateSB(p); |
|||
} |
|||
else if (prestart == 1) |
|||
for (final Player p : players) { |
|||
p.sendMessage( |
|||
plugin.getLang().get(p, "messages.prestart").replaceAll("<time>", String.valueOf(prestart)) |
|||
.replaceAll("<units>", plugin.getLang().get(p, "units.second"))); |
|||
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.prestart")), 1.0f, |
|||
1.0f); |
|||
plugin.getTM().sendPreTitle(p, prestart, false); |
|||
for (final String msg : plugin.getLang().getList("messages.start")) |
|||
CenterMessage.sendCenteredMessage(p, msg.replaceAll("&", "§")); |
|||
updateSB(p); |
|||
} |
|||
else if (prestart == 0) { |
|||
setState(State.INGAME); |
|||
updateSign(); |
|||
if (plugin.isCage()) { |
|||
for (final Team team : teams.values()) |
|||
if (team.isCage()) { |
|||
team.removeCage(); |
|||
team.setCage(false); |
|||
} |
|||
} else |
|||
for (final ChatColor color : teams.keySet()) |
|||
plugin.getGLM().removeGlass(teams.get(color).getTeamSpawn()); |
|||
for (final Player p : players) { |
|||
updateSB(p); |
|||
p.setGameMode(GameMode.SURVIVAL); |
|||
} |
|||
} |
|||
prestart--; |
|||
} |
|||
} |
|||
|
|||
public Team getTeamPlayer(Player p) { |
|||
return teams.get(teamPlayer.get(p)); |
|||
} |
|||
|
|||
public void addPlayerTeam(Player p, Team t) { |
|||
t.addPlayer(p); |
|||
teamPlayer.put(p, t.getColor()); |
|||
} |
|||
|
|||
public void addRandomTeam(Player p) { |
|||
final Team red = teams.get(ChatColor.RED); |
|||
final Team blue = teams.get(ChatColor.BLUE); |
|||
if (red.getTeamSize() <= blue.getTeamSize()) { |
|||
red.addPlayer(p); |
|||
teamPlayer.put(p, red.getColor()); |
|||
} else { |
|||
blue.addPlayer(p); |
|||
teamPlayer.put(p, blue.getColor()); |
|||
} |
|||
} |
|||
|
|||
public void removeAllPlayerTeam(Player p) { |
|||
for (final Team t : teams.values()) |
|||
if (t.getTeamPlayers().contains(p)) |
|||
t.removePlayer(p); |
|||
} |
|||
|
|||
public ArrayList<Location> getBuild() { |
|||
return build; |
|||
} |
|||
|
|||
public HashMap<ChatColor, Team> getTeams() { |
|||
return teams; |
|||
} |
|||
|
|||
public int getTeamsAlive() { |
|||
int cantidad = 0; |
|||
for (final Team team : teams.values()) |
|||
if (team.getTeamSize() > 0) |
|||
cantidad++; |
|||
return cantidad; |
|||
} |
|||
|
|||
public Team getLastTeam() { |
|||
for (final Team team : teams.values()) |
|||
if (team.getTeamSize() > 0) |
|||
return team; |
|||
return null; |
|||
} |
|||
|
|||
public int getPlayers() { |
|||
return players.size(); |
|||
} |
|||
|
|||
public ArrayList<Player> getGamePlayers() { |
|||
return players; |
|||
} |
|||
|
|||
public String getName() { |
|||
return this.name; |
|||
} |
|||
|
|||
public int getMax() { |
|||
return this.max; |
|||
} |
|||
|
|||
public String getMode() { |
|||
return mode; |
|||
} |
|||
|
|||
public int getMin() { |
|||
return this.min; |
|||
} |
|||
|
|||
public Main get() { |
|||
return plugin; |
|||
} |
|||
|
|||
public State getState() { |
|||
return this.state; |
|||
} |
|||
|
|||
public void setState(State state) { |
|||
this.state = state; |
|||
} |
|||
|
|||
public boolean isState(State state) { |
|||
if (this.state == state) |
|||
return true; |
|||
return false; |
|||
} |
|||
|
|||
public enum State { |
|||
WAITING, STARTING, PPGAME, PREGAME, INGAME, FINISH, RESTARTING; |
|||
} |
|||
|
|||
public int getGoals(Player p) { |
|||
return goals.get(p); |
|||
} |
|||
|
|||
public int getKills(Player p) { |
|||
return kills.get(p); |
|||
} |
|||
|
|||
public void addGoal(Player p) { |
|||
goals.put(p, goals.get(p) + 1); |
|||
updateSB(p); |
|||
} |
|||
|
|||
public void addKill(Player p) { |
|||
kills.put(p, kills.get(p) + 1); |
|||
updateSB(p); |
|||
} |
|||
|
|||
public void giveKit(Player p, Team team) { |
|||
final ItemStack helmet = new ItemStack(Material.LEATHER_HELMET, 1); |
|||
final LeatherArmorMeta helmetM = (LeatherArmorMeta) helmet.getItemMeta(); |
|||
helmetM.setColor(team.getFColor()); |
|||
helmet.setItemMeta(helmetM); |
|||
final ItemStack peche = new ItemStack(Material.LEATHER_CHESTPLATE, 1); |
|||
final LeatherArmorMeta pecheM = (LeatherArmorMeta) peche.getItemMeta(); |
|||
pecheM.setColor(team.getFColor()); |
|||
peche.setItemMeta(pecheM); |
|||
final ItemStack panta = new ItemStack(Material.IRON_LEGGINGS, 1); |
|||
final ItemMeta pantaM = panta.getItemMeta(); |
|||
panta.setItemMeta(pantaM); |
|||
final ItemStack boots = new ItemStack(Material.IRON_BOOTS, 1); |
|||
final ItemMeta bootsM = boots.getItemMeta(); |
|||
boots.setItemMeta(bootsM); |
|||
p.getInventory().setHelmet(helmet); |
|||
p.getInventory().setChestplate(peche); |
|||
p.getInventory().setLeggings(panta); |
|||
p.getInventory().setBoots(boots); |
|||
if (PlayerStat.getPlayerStat(p).getHotbar() == null) { |
|||
final ItemStack[] items = plugin.getGM().getKit().getContents(); |
|||
for (int slot = 0; slot < 35; slot++) { |
|||
final ItemStack item = items[slot]; |
|||
if (item == null || item.getType() == Material.BARRIER) { |
|||
p.getInventory().setItem(slot, new ItemStack(Material.AIR)); |
|||
continue; |
|||
} |
|||
if (item.getType().equals(Material.STAINED_CLAY)) { |
|||
final ItemStack item2 = new ItemStack(item.getType(), item.getAmount(), getColor(team.getFColor())); |
|||
p.getInventory().setItem(slot, item2); |
|||
continue; |
|||
} |
|||
p.getInventory().setItem(slot, item); |
|||
} |
|||
} else { |
|||
final ItemStack[] items = PlayerStat.getPlayerStat(p).getHotbar(); |
|||
for (int slot = 0; slot < 35; slot++) { |
|||
final ItemStack item = items[slot]; |
|||
if (item == null || item.getType() == Material.BARRIER) { |
|||
p.getInventory().setItem(slot, new ItemStack(Material.AIR)); |
|||
continue; |
|||
} |
|||
if (item.getType().equals(Material.STAINED_CLAY)) { |
|||
final ItemStack item2 = new ItemStack(item.getType(), item.getAmount(), getColor(team.getFColor())); |
|||
p.getInventory().setItem(slot, item2); |
|||
continue; |
|||
} |
|||
p.getInventory().setItem(slot, item); |
|||
} |
|||
} |
|||
} |
|||
|
|||
public void givePlayerItems(Player p) { |
|||
if (teamSize > 1) { |
|||
final ItemStack team = ItemBuilder.item(Material.PAPER, 1, (short) 0, |
|||
plugin.getLang().get("items.teams.nameItem"), plugin.getLang().get("items.teams.loreItem")); |
|||
p.getInventory().setItem(0, team); |
|||
} |
|||
final ItemStack leave = ItemBuilder.item(Material.BED, 1, (short) 0, |
|||
plugin.getLang().get("items.leave.nameItem"), |
|||
plugin.getLang().get("items.leave.loreItem")); |
|||
p.getInventory().setItem(8, leave); |
|||
} |
|||
|
|||
public byte getColor(Color color) { |
|||
if (color.equals(Color.RED)) |
|||
return 14; |
|||
if (color.equals(Color.BLUE)) |
|||
return 11; |
|||
return 0; |
|||
} |
|||
|
|||
public int getTeamSize() { |
|||
return teamSize; |
|||
} |
|||
|
|||
public void addPlace(Location loc) { |
|||
placed.add(loc); |
|||
} |
|||
|
|||
public ArrayList<Location> getPlaced() { |
|||
return placed; |
|||
} |
|||
|
|||
public int getStarting() { |
|||
return starting; |
|||
} |
|||
|
|||
public Location getLobby() { |
|||
return lobby; |
|||
} |
|||
|
|||
public Location getSpect() { |
|||
return spect; |
|||
} |
|||
|
|||
public HashMap<Player, PlayerData> getPD() { |
|||
return pd; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,944 @@ |
|||
package cx.sfy.TheBridge.game; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.ChatColor; |
|||
import org.bukkit.Color; |
|||
import org.bukkit.FireworkEffect; |
|||
import org.bukkit.GameMode; |
|||
import org.bukkit.Location; |
|||
import org.bukkit.Material; |
|||
import org.bukkit.Sound; |
|||
import org.bukkit.entity.Firework; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.inventory.ItemStack; |
|||
import org.bukkit.inventory.meta.FireworkMeta; |
|||
import org.bukkit.inventory.meta.LeatherArmorMeta; |
|||
import org.bukkit.scheduler.BukkitRunnable; |
|||
import org.bukkit.scheduler.BukkitTask; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.database.PlayerStat; |
|||
import cx.sfy.TheBridge.hologram.TruenoHologram; |
|||
import cx.sfy.TheBridge.hologram.TruenoHologramAPI; |
|||
import cx.sfy.TheBridge.team.TeamFour; |
|||
import cx.sfy.TheBridge.utils.CenterMessage; |
|||
import cx.sfy.TheBridge.utils.ItemBuilder; |
|||
import cx.sfy.TheBridge.utils.Utils; |
|||
|
|||
import java.text.DecimalFormat; |
|||
import java.util.ArrayList; |
|||
import java.util.HashMap; |
|||
import java.util.Random; |
|||
|
|||
public class GameFour { |
|||
|
|||
private Main plugin; |
|||
private HashMap<ChatColor, TeamFour> teams; |
|||
private HashMap<Player, ChatColor> teamPlayer; |
|||
private ArrayList<Player> players; |
|||
private ArrayList<Player> spects; |
|||
private HashMap<Player, PlayerData> pd = new HashMap<Player, PlayerData>(); |
|||
private HashMap<Player, Integer> goals = new HashMap<Player, Integer>(); |
|||
private HashMap<Player, Integer> kills = new HashMap<Player, Integer>(); |
|||
private ArrayList<Location> build = new ArrayList<Location>(); |
|||
private ArrayList<Location> placed = new ArrayList<Location>(); |
|||
private ArrayList<TruenoHologram> holograms = new ArrayList<TruenoHologram>(); |
|||
private Location lobby; |
|||
private Location spect; |
|||
private String name; |
|||
private String mode; |
|||
private int min; |
|||
private int max; |
|||
private int teamSize; |
|||
private int starting; |
|||
private int prestart; |
|||
private BukkitTask start; |
|||
private FState state; |
|||
|
|||
public GameFour(Main plugin, String name, int min, int max, int teamSize, int starting, int prestart, |
|||
Location lobby, Location spect, Location buildMin, Location buildMax, Location spawnRed, Location spawnBlue, |
|||
Location spawnGreen, Location spawnYellow, Location respawnRed, Location respawnBlue, Location respawnGreen, |
|||
Location respawnYellow, ArrayList<Location> portalRed, ArrayList<Location> portalBlue, |
|||
ArrayList<Location> portalGreen, ArrayList<Location> portalYellow, Location hRed, Location hBlue, |
|||
Location hGreen, Location hYellow) { |
|||
this.plugin = plugin; |
|||
this.name = name; |
|||
this.starting = starting; |
|||
this.prestart = prestart; |
|||
this.mode = teamSize + "v" + teamSize + "v" + teamSize + "v" + teamSize; |
|||
this.max = max; |
|||
this.min = min; |
|||
this.lobby = lobby; |
|||
this.spect = spect; |
|||
this.teamSize = teamSize; |
|||
this.teamPlayer = new HashMap<>(); |
|||
this.teams = new HashMap<>(); |
|||
this.players = new ArrayList<>(); |
|||
this.spects = new ArrayList<>(); |
|||
int gn = Math.min(buildMin.getBlockX(), buildMax.getBlockX()); |
|||
int gn2 = Math.max(buildMin.getBlockX(), buildMax.getBlockX()); |
|||
int gn3 = Math.min(buildMin.getBlockZ(), buildMax.getBlockZ()); |
|||
int gn4 = Math.max(buildMin.getBlockZ(), buildMax.getBlockZ()); |
|||
int gn5 = Math.min(buildMin.getBlockY(), buildMax.getBlockY()); |
|||
int gn6 = Math.max(buildMin.getBlockY(), buildMax.getBlockY()); |
|||
for (int i = gn; i <= gn2; ++i) { |
|||
for (int j = gn5; j <= gn6; ++j) { |
|||
for (int k = gn3; k <= gn4; ++k) { |
|||
Location location3 = new Location(buildMin.getWorld(), (double) i, (double) j, (double) k); |
|||
build.add(location3); |
|||
} |
|||
} |
|||
} |
|||
this.teams.put(ChatColor.BLUE, new TeamFour(this, ChatColor.BLUE, Color.BLUE, |
|||
plugin.getConfig().getString("names.blue"), spawnBlue, respawnBlue, portalBlue, hBlue)); |
|||
this.teams.put(ChatColor.RED, new TeamFour(this, ChatColor.RED, Color.RED, |
|||
plugin.getConfig().getString("names.red"), spawnRed, respawnRed, portalRed, hRed)); |
|||
this.teams.put(ChatColor.GREEN, new TeamFour(this, ChatColor.GREEN, Color.GREEN, |
|||
plugin.getConfig().getString("names.green"), spawnGreen, respawnGreen, portalGreen, hGreen)); |
|||
this.teams.put(ChatColor.YELLOW, new TeamFour(this, ChatColor.YELLOW, Color.YELLOW, |
|||
plugin.getConfig().getString("names.yellow"), spawnYellow, respawnYellow, portalYellow, hYellow)); |
|||
setState(FState.WAITING); |
|||
updateSign(); |
|||
} |
|||
|
|||
public void checkCancel() { |
|||
if (isState(FState.STARTING) && players.size() <= getMin()) { |
|||
if (start != null) { |
|||
start.cancel(); |
|||
} |
|||
setState(FState.WAITING); |
|||
starting = 30; |
|||
updateSign(); |
|||
for (Player on : players) { |
|||
updateSB(on); |
|||
} |
|||
} |
|||
} |
|||
|
|||
public void updateSB(Player p) { |
|||
plugin.getSB().update(p); |
|||
} |
|||
|
|||
public void updateSign() { |
|||
plugin.getSIM().updateGameFourSign(this); |
|||
} |
|||
|
|||
public String getMode() { |
|||
return mode; |
|||
} |
|||
|
|||
public boolean checkWin(TeamFour win, TeamFour death, Player e) { |
|||
|
|||
if (getTeamsAlive() <= 1 && !isState(FState.FINISH)) { |
|||
setState(FState.FINISH); |
|||
updateSign(); |
|||
DecimalFormat df = new DecimalFormat("#.##"); |
|||
for (Player w : win.getTeamPlayers()) { |
|||
PlayerStat.getPlayerStat(w).addFourWins(); |
|||
} |
|||
for (Player p : players) { |
|||
plugin.getNMS().sendTitle(p, 0, 60, 0, |
|||
plugin.getLang().get("titles.winFour.title").replaceAll("<life>", win.getLifeString()) |
|||
.replaceAll("<team>", win.getTeamName()).replaceAll("<color>", win.getColor() + ""), |
|||
plugin.getLang().get("titles.winFour.subtitle").replaceAll("<life>", win.getLifeString()) |
|||
.replaceAll("<team>", win.getTeamName()).replaceAll("<color>", win.getColor() + "")); |
|||
for (String msg : plugin.getLang().getList("messages.winFour")) { |
|||
CenterMessage.sendCenteredMessage(p, msg.replaceAll("&", "§").replaceAll("<player>", e.getName()) |
|||
.replaceAll("<health>", df.format(e.getHealth())).replaceAll("<team>", win.getTeamName()) |
|||
.replaceAll("<goals>", String.valueOf(goals.get(e))) |
|||
.replaceAll("<es>", (goals.get(e) > 1) ? "es" : "") |
|||
.replaceAll("<red>", teams.get(ChatColor.RED).getTeamName()) |
|||
.replaceAll("<redLife>", teams.get(ChatColor.RED).getLifeString()) |
|||
.replaceAll("<blue>", teams.get(ChatColor.BLUE).getTeamName()) |
|||
.replaceAll("<blueLife>", teams.get(ChatColor.BLUE).getLifeString()) |
|||
.replaceAll("<yellow>", teams.get(ChatColor.YELLOW).getTeamName()) |
|||
.replaceAll("<yellowLife>", teams.get(ChatColor.YELLOW).getLifeString()) |
|||
.replaceAll("<green>", teams.get(ChatColor.GREEN).getTeamName()).replaceAll("<heart>", "❤") |
|||
.replaceAll("<greenLife>", teams.get(ChatColor.GREEN).getLifeString()) |
|||
.replaceAll("<teamStole>", (death.getTeamName() == null) ? "Stole" : death.getTeamName()) |
|||
.replaceAll("<color>", |
|||
(win.getColor() == null) ? ChatColor.WHITE + "" : win.getColor() + "")); |
|||
} |
|||
} |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
for (TruenoHologram th : holograms) { |
|||
th.delete(); |
|||
} |
|||
for (Player p : spect.getWorld().getPlayers()) { |
|||
if (pd.containsKey(p)) { |
|||
for (Player on : Bukkit.getOnlinePlayers()) { |
|||
on.showPlayer(p); |
|||
p.showPlayer(on); |
|||
} |
|||
plugin.getGM().removePlayerFourGames(p); |
|||
} else { |
|||
p.teleport(plugin.getMainLobby()); |
|||
} |
|||
} |
|||
} |
|||
}.runTaskLater(plugin, 20 * 10); |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
plugin.getGM().resetFourGame(getName()); |
|||
} |
|||
}.runTaskLater(plugin, 20 * 12); |
|||
return true; |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
public void celebrateGoal(TeamFour team, TeamFour death, Player e) { |
|||
DecimalFormat df = new DecimalFormat("#.##"); |
|||
addGoal(e); |
|||
PlayerStat.getPlayerStat(e).addFourGoals(); |
|||
firework(getSpect(), team.getFColor()); |
|||
e.teleport(team.getTeamRespawn()); |
|||
if (getTeamsAlive() == 2) { |
|||
death.removeLife(1); |
|||
if (death.getLife() == 0) { |
|||
death.killTeam(); |
|||
if (checkWin(team, death, e)) { |
|||
return; |
|||
} |
|||
for (Player p : players) { |
|||
plugin.getNMS().sendTitle(p, 0, 20, 0, |
|||
plugin.getLang().get("titles.goalFinal.title").replaceAll("<player>", e.getName()) |
|||
.replaceAll("<heart>", "❤").replaceAll("<teamOther>", team.getTeamName()) |
|||
.replaceAll("<teamStole>", death.getTeamName()) |
|||
.replaceAll("<color>", team.getColor() + ""), |
|||
plugin.getLang().get("titles.goalFinal.subtitle").replaceAll("<player>", e.getName()) |
|||
.replaceAll("<heart>", "❤").replaceAll("<teamOther>", team.getTeamName()) |
|||
.replaceAll("<teamStole>", death.getTeamName()) |
|||
.replaceAll("<color>", team.getColor() + "")); |
|||
} |
|||
} else { |
|||
for (Player p : players) { |
|||
plugin.getNMS().sendTitle(p, 0, 20, 0, |
|||
plugin.getLang().get("titles.goalNormal.title").replaceAll("<player>", e.getName()) |
|||
.replaceAll("<heart>", "❤").replaceAll("<teamOther>", team.getTeamName()) |
|||
.replaceAll("<teamStole>", death.getTeamName()) |
|||
.replaceAll("<color>", team.getColor() + ""), |
|||
plugin.getLang().get("titles.goalNormal.subtitle").replaceAll("<player>", e.getName()) |
|||
.replaceAll("<heart>", "�").replaceAll("<teamOther>", team.getTeamName()) |
|||
.replaceAll("<teamStole>", death.getTeamName()) |
|||
.replaceAll("<color>", team.getColor() + "")); |
|||
} |
|||
} |
|||
for (Player p : players) { |
|||
updateSB(p); |
|||
for (String msg : plugin.getLang().getList("messages.final")) { |
|||
CenterMessage.sendCenteredMessage(p, |
|||
msg.replaceAll("&", "§").replaceAll("<teamStole>", death.getTeamName()) |
|||
.replaceAll("<goals>", String.valueOf(goals.get(e))) |
|||
.replaceAll("<es>", (goals.get(e) > 1) ? "es" : "") |
|||
.replaceAll("<teamOther>", team.getTeamName()) |
|||
.replaceAll("<color>", "" + team.getColor()).replaceAll("<player>", e.getName()) |
|||
.replaceAll("<health>", df.format(e.getHealth())) |
|||
.replaceAll("<team>", team.getTeamName()) |
|||
.replaceAll("<red>", teams.get(ChatColor.RED).getTeamName()) |
|||
.replaceAll("<redLife>", teams.get(ChatColor.RED).getLifeString()) |
|||
.replaceAll("<blue>", teams.get(ChatColor.BLUE).getTeamName()) |
|||
.replaceAll("<blueLife>", teams.get(ChatColor.BLUE).getLifeString()) |
|||
.replaceAll("<yellow>", teams.get(ChatColor.YELLOW).getTeamName()) |
|||
.replaceAll("<yellowLife>", teams.get(ChatColor.YELLOW).getLifeString()) |
|||
.replaceAll("<green>", teams.get(ChatColor.GREEN).getTeamName()) |
|||
.replaceAll("<greenLife>", teams.get(ChatColor.GREEN).getLifeString()) |
|||
.replaceAll("<heart>", "❤")); |
|||
} |
|||
} |
|||
} else { |
|||
team.addLife(1); |
|||
death.removeLife(1); |
|||
if (death.getLife() == 0) { |
|||
death.killTeam(); |
|||
if (checkWin(team, death, e)) { |
|||
return; |
|||
} |
|||
for (Player p : players) { |
|||
plugin.getNMS().sendTitle(p, 0, 20, 0, |
|||
plugin.getLang().get("titles.goalFinal.title").replaceAll("<player>", e.getName()) |
|||
.replaceAll("<heart>", "❤").replaceAll("<teamOther>", team.getTeamName()) |
|||
.replaceAll("<teamStole>", death.getTeamName()) |
|||
.replaceAll("<color>", team.getColor() + ""), |
|||
plugin.getLang().get("titles.goalFinal.subtitle").replaceAll("<player>", e.getName()) |
|||
.replaceAll("<heart>", "❤").replaceAll("<teamOther>", team.getTeamName()) |
|||
.replaceAll("<teamStole>", death.getTeamName()) |
|||
.replaceAll("<color>", team.getColor() + "")); |
|||
} |
|||
|
|||
} else { |
|||
for (Player p : players) { |
|||
plugin.getNMS().sendTitle(p, 0, 20, 0, |
|||
plugin.getLang().get("titles.goalNormal.title").replaceAll("<player>", e.getName()) |
|||
.replaceAll("<heart>", "❤").replaceAll("<teamOther>", team.getTeamName()) |
|||
.replaceAll("<teamStole>", death.getTeamName()) |
|||
.replaceAll("<color>", team.getColor() + ""), |
|||
plugin.getLang().get("titles.goalNormal.subtitle").replaceAll("<player>", e.getName()) |
|||
.replaceAll("<heart>", "❤").replaceAll("<teamOther>", team.getTeamName()) |
|||
.replaceAll("<teamStole>", death.getTeamName()) |
|||
.replaceAll("<color>", team.getColor() + "")); |
|||
} |
|||
} |
|||
for (Player p : players) { |
|||
updateSB(p); |
|||
for (String msg : plugin.getLang().getList("messages.stole")) { |
|||
CenterMessage.sendCenteredMessage(p, |
|||
msg.replaceAll("&", "§").replaceAll("<teamStole>", death.getTeamName()) |
|||
.replaceAll("<goals>", String.valueOf(goals.get(e))) |
|||
.replaceAll("<es>", (goals.get(e) > 1) ? "es" : "") |
|||
.replaceAll("<color>", "" + team.getColor()) |
|||
.replaceAll("<teamOther>", team.getTeamName()).replaceAll("<player>", e.getName()) |
|||
.replaceAll("<health>", df.format(e.getHealth())) |
|||
.replaceAll("<red>", teams.get(ChatColor.RED).getTeamName()) |
|||
.replaceAll("<redLife>", teams.get(ChatColor.RED).getLifeString()) |
|||
.replaceAll("<blue>", teams.get(ChatColor.BLUE).getTeamName()) |
|||
.replaceAll("<blueLife>", teams.get(ChatColor.BLUE).getLifeString()) |
|||
.replaceAll("<yellow>", teams.get(ChatColor.YELLOW).getTeamName()) |
|||
.replaceAll("<yellowLife>", teams.get(ChatColor.YELLOW).getLifeString()) |
|||
.replaceAll("<green>", teams.get(ChatColor.GREEN).getTeamName()) |
|||
.replaceAll("<greenLife>", teams.get(ChatColor.GREEN).getLifeString()) |
|||
.replaceAll("<heart>", "❤")); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
public void firework(Location loc, Color c1) { |
|||
Firework fa = (Firework) loc.getWorld().spawn( |
|||
loc.clone().add(new Random().nextInt(5) + 1, new Random().nextInt(1) + 1, new Random().nextInt(5) + 1), |
|||
Firework.class); |
|||
FireworkMeta fam = fa.getFireworkMeta(); |
|||
FireworkEffect.Type tipo = FireworkEffect.Type.STAR; |
|||
Color c2 = Color.WHITE; |
|||
FireworkEffect ef = FireworkEffect.builder().withColor(c1).withFade(c2).with(tipo).build(); |
|||
fam.addEffect(ef); |
|||
fam.setPower(0); |
|||
fa.setFireworkMeta(fam); |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
Firework fa = (Firework) loc.getWorld().spawn(loc.clone().add(new Random().nextInt(5) + 1, |
|||
new Random().nextInt(1) + 1, new Random().nextInt(5) + 1), Firework.class); |
|||
FireworkMeta fam = fa.getFireworkMeta(); |
|||
FireworkEffect.Type tipo = FireworkEffect.Type.STAR; |
|||
Color c2 = Color.WHITE; |
|||
FireworkEffect ef = FireworkEffect.builder().withColor(c1).withFade(c2).with(tipo).build(); |
|||
fam.addEffect(ef); |
|||
fam.setPower(0); |
|||
fa.setFireworkMeta(fam); |
|||
} |
|||
}.runTaskLater(plugin, 2); |
|||
} |
|||
|
|||
public void addPlayer(Player p) { |
|||
pd.put(p, new PlayerData(p)); |
|||
Utils.setCleanPlayer(p); |
|||
players.add(p); |
|||
kills.put(p, 0); |
|||
goals.put(p, 0); |
|||
p.teleport(getLobby()); |
|||
if (isState(FState.WAITING) || isState(FState.STARTING)) { |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
givePlayerItems(p); |
|||
} |
|||
}.runTaskLater(plugin, 20); |
|||
for (Player on : players) { |
|||
on.sendMessage(plugin.getLang().get("messages.join").replaceAll("<player>", p.getName()) |
|||
.replaceAll("<players>", String.valueOf(players.size())) |
|||
.replaceAll("<max>", String.valueOf(getMax()))); |
|||
on.playSound(on.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.join")), 1.0f, 1.0f); |
|||
updateSB(on); |
|||
} |
|||
} |
|||
updateSign(); |
|||
} |
|||
|
|||
public void removePlayer(Player p) { |
|||
Utils.setCleanPlayer(p); |
|||
pd.get(p).restore(); |
|||
removeAllPlayerTeam(p); |
|||
players.remove(p); |
|||
if (isState(FState.WAITING) || isState(FState.STARTING)) { |
|||
for (Player on : players) { |
|||
on.sendMessage(plugin.getLang().get("messages.quit").replaceAll("<player>", p.getName()) |
|||
.replaceAll("<players>", String.valueOf(players.size())) |
|||
.replaceAll("<max>", String.valueOf(getMax()))); |
|||
on.playSound(on.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.quit")), 1.0f, 1.0f); |
|||
updateSB(on); |
|||
} |
|||
} else { |
|||
if (getTeamsAlive() == 1) { |
|||
checkWin(getLastTeam(), getTeamPlayer(p), getLastTeam().getTeamPlayers().get(0)); |
|||
} |
|||
} |
|||
updateSign(); |
|||
checkCancel(); |
|||
} |
|||
|
|||
public void updateGame() { |
|||
if (isState(FState.WAITING) && players.size() >= getMin()) { |
|||
setState(FState.STARTING); |
|||
updateSign(); |
|||
for (Player p : players) { |
|||
p.setGameMode(GameMode.ADVENTURE); |
|||
} |
|||
} |
|||
if (isState(FState.STARTING)) { |
|||
for (Player p : players) { |
|||
updateSB(p); |
|||
} |
|||
if (starting == 240 || starting == 180 || starting == 120) { |
|||
for (Player p : players) { |
|||
p.sendMessage(plugin.getLang().get(p, "messages.starting") |
|||
.replaceAll("<time>", String.valueOf(starting / 60)) |
|||
.replaceAll("<units>", plugin.getLang().get(p, "units.minutes"))); |
|||
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.starting")), 1.0f, |
|||
1.0f); |
|||
plugin.getTM().sendStartTitle(p, starting, true); |
|||
} |
|||
} |
|||
if (starting == 60) { |
|||
for (Player p : players) { |
|||
p.sendMessage(plugin.getLang().get(p, "messages.starting") |
|||
.replaceAll("<time>", String.valueOf(starting / 60)) |
|||
.replaceAll("<units>", plugin.getLang().get(p, "units.minute"))); |
|||
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.starting")), 1.0f, |
|||
1.0f); |
|||
plugin.getTM().sendStartTitle(p, starting, true); |
|||
} |
|||
} |
|||
if (starting == 30 || starting == 15 || starting == 10 || starting == 5 || starting == 4 || starting == 3 |
|||
|| starting == 2) { |
|||
for (Player p : players) { |
|||
p.sendMessage( |
|||
plugin.getLang().get(p, "messages.starting").replaceAll("<time>", String.valueOf(starting)) |
|||
.replaceAll("<units>", plugin.getLang().get(p, "units.seconds"))); |
|||
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.starting")), 1.0f, |
|||
1.0f); |
|||
plugin.getTM().sendStartTitle(p, starting, true); |
|||
} |
|||
} |
|||
if (starting == 1) { |
|||
setState(FState.PREGAME); |
|||
updateSign(); |
|||
for (Player p : players) { |
|||
p.sendMessage( |
|||
plugin.getLang().get(p, "messages.starting").replaceAll("<time>", String.valueOf(starting)) |
|||
.replaceAll("<units>", plugin.getLang().get(p, "units.second"))); |
|||
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.starting")), 1.0f, |
|||
1.0f); |
|||
p.getInventory().clear(); |
|||
p.getOpenInventory().close(); |
|||
plugin.getTM().sendStartTitle(p, starting, false); |
|||
if (getTeamPlayer(p) == null) { |
|||
addRandomTeam(p); |
|||
} |
|||
} |
|||
if (plugin.isCage()) { |
|||
for (TeamFour team : teams.values()) { |
|||
if (!team.isCage()) { |
|||
if (team.getTeamPlayers().size() > 0 && team.getTeamPlayers().get(0) != null) { |
|||
team.createCage(plugin.getCM().getCageByName( |
|||
PlayerStat.getPlayerStat(team.getTeamPlayers().get(0)).getCage())); |
|||
team.setCage(true); |
|||
} else { |
|||
team.createCage( |
|||
plugin.getCM().getCageByName(plugin.getConfig().getString("defaultCage"))); |
|||
team.setCage(true); |
|||
} |
|||
} |
|||
} |
|||
} else { |
|||
for (ChatColor color : teams.keySet()) { |
|||
plugin.getGLM().createCage(teams.get(color).getTeamSpawn(), color); |
|||
} |
|||
} |
|||
for (Player p : players) { |
|||
p.teleport(getTeamPlayer(p).getTeamSpawn().clone().add(0, 1, 0)); |
|||
giveKit(p, getTeamPlayer(p)); |
|||
} |
|||
Location hRed = teams.get(ChatColor.RED).getHologram(); |
|||
Location hBlue = teams.get(ChatColor.BLUE).getHologram(); |
|||
Location hGreen = teams.get(ChatColor.GREEN).getHologram(); |
|||
Location hYellow = teams.get(ChatColor.YELLOW).getHologram(); |
|||
if (hRed != null && hBlue != null && hGreen != null && hYellow != null) { |
|||
for (Player p : teams.get(ChatColor.RED).getTeamPlayers()) { |
|||
ArrayList<String> pRed = new ArrayList<String>(); |
|||
TruenoHologram phRed = TruenoHologramAPI.getNewHologram(); |
|||
for (String portal : plugin.getLang().getList("holograms.portal.you")) { |
|||
pRed.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.RED) |
|||
.replaceAll("<team>", plugin.getLang().get("holograms.your"))); |
|||
} |
|||
ArrayList<String> pBlue = new ArrayList<String>(); |
|||
TruenoHologram phBlue = TruenoHologramAPI.getNewHologram(); |
|||
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) { |
|||
pBlue.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.BLUE) |
|||
.replaceAll("<team>", teams.get(ChatColor.BLUE).getTeamName())); |
|||
} |
|||
ArrayList<String> pGreen = new ArrayList<String>(); |
|||
TruenoHologram phGreen = TruenoHologramAPI.getNewHologram(); |
|||
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) { |
|||
pGreen.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.GREEN) |
|||
.replaceAll("<team>", teams.get(ChatColor.GREEN).getTeamName())); |
|||
} |
|||
ArrayList<String> pYellow = new ArrayList<String>(); |
|||
TruenoHologram phYellow = TruenoHologramAPI.getNewHologram(); |
|||
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) { |
|||
pYellow.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.YELLOW) |
|||
.replaceAll("<team>", teams.get(ChatColor.YELLOW).getTeamName())); |
|||
} |
|||
phBlue.setupPlayerHologram(p, hBlue, pBlue); |
|||
phBlue.display(); |
|||
phRed.setupPlayerHologram(p, hRed, pRed); |
|||
phRed.display(); |
|||
phGreen.setupPlayerHologram(p, hGreen, pGreen); |
|||
phGreen.display(); |
|||
phYellow.setupPlayerHologram(p, hYellow, pYellow); |
|||
phYellow.display(); |
|||
holograms.add(phRed); |
|||
holograms.add(phBlue); |
|||
holograms.add(phGreen); |
|||
holograms.add(phYellow); |
|||
} |
|||
for (Player p : teams.get(ChatColor.BLUE).getTeamPlayers()) { |
|||
ArrayList<String> pRed = new ArrayList<String>(); |
|||
TruenoHologram phRed = TruenoHologramAPI.getNewHologram(); |
|||
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) { |
|||
pRed.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.RED) |
|||
.replaceAll("<team>", teams.get(ChatColor.RED).getTeamName())); |
|||
} |
|||
ArrayList<String> pBlue = new ArrayList<String>(); |
|||
TruenoHologram phBlue = TruenoHologramAPI.getNewHologram(); |
|||
for (String portal : plugin.getLang().getList("holograms.portal.you")) { |
|||
pBlue.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.BLUE) |
|||
.replaceAll("<team>", plugin.getLang().get("holograms.your"))); |
|||
} |
|||
ArrayList<String> pGreen = new ArrayList<String>(); |
|||
TruenoHologram phGreen = TruenoHologramAPI.getNewHologram(); |
|||
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) { |
|||
pGreen.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.GREEN) |
|||
.replaceAll("<team>", teams.get(ChatColor.GREEN).getTeamName())); |
|||
} |
|||
ArrayList<String> pYellow = new ArrayList<String>(); |
|||
TruenoHologram phYellow = TruenoHologramAPI.getNewHologram(); |
|||
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) { |
|||
pYellow.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.YELLOW) |
|||
.replaceAll("<team>", teams.get(ChatColor.YELLOW).getTeamName())); |
|||
} |
|||
phBlue.setupPlayerHologram(p, hBlue, pBlue); |
|||
phBlue.display(); |
|||
phRed.setupPlayerHologram(p, hRed, pRed); |
|||
phRed.display(); |
|||
phGreen.setupPlayerHologram(p, hGreen, pGreen); |
|||
phGreen.display(); |
|||
phYellow.setupPlayerHologram(p, hYellow, pYellow); |
|||
phYellow.display(); |
|||
holograms.add(phRed); |
|||
holograms.add(phBlue); |
|||
holograms.add(phGreen); |
|||
holograms.add(phYellow); |
|||
} |
|||
for (Player p : teams.get(ChatColor.GREEN).getTeamPlayers()) { |
|||
ArrayList<String> pRed = new ArrayList<String>(); |
|||
TruenoHologram phRed = TruenoHologramAPI.getNewHologram(); |
|||
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) { |
|||
pRed.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.RED) |
|||
.replaceAll("<team>", teams.get(ChatColor.RED).getTeamName())); |
|||
} |
|||
ArrayList<String> pBlue = new ArrayList<String>(); |
|||
TruenoHologram phBlue = TruenoHologramAPI.getNewHologram(); |
|||
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) { |
|||
pBlue.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.BLUE) |
|||
.replaceAll("<team>", teams.get(ChatColor.BLUE).getTeamName())); |
|||
} |
|||
ArrayList<String> pGreen = new ArrayList<String>(); |
|||
TruenoHologram phGreen = TruenoHologramAPI.getNewHologram(); |
|||
for (String portal : plugin.getLang().getList("holograms.portal.you")) { |
|||
pGreen.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.GREEN) |
|||
.replaceAll("<team>", plugin.getLang().get("holograms.your"))); |
|||
} |
|||
ArrayList<String> pYellow = new ArrayList<String>(); |
|||
TruenoHologram phYellow = TruenoHologramAPI.getNewHologram(); |
|||
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) { |
|||
pYellow.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.YELLOW) |
|||
.replaceAll("<team>", teams.get(ChatColor.YELLOW).getTeamName())); |
|||
} |
|||
phBlue.setupPlayerHologram(p, hBlue, pBlue); |
|||
phBlue.display(); |
|||
phRed.setupPlayerHologram(p, hRed, pRed); |
|||
phRed.display(); |
|||
phGreen.setupPlayerHologram(p, hGreen, pGreen); |
|||
phGreen.display(); |
|||
phYellow.setupPlayerHologram(p, hYellow, pYellow); |
|||
phYellow.display(); |
|||
holograms.add(phRed); |
|||
holograms.add(phBlue); |
|||
holograms.add(phGreen); |
|||
holograms.add(phYellow); |
|||
} |
|||
for (Player p : teams.get(ChatColor.YELLOW).getTeamPlayers()) { |
|||
ArrayList<String> pRed = new ArrayList<String>(); |
|||
TruenoHologram phRed = TruenoHologramAPI.getNewHologram(); |
|||
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) { |
|||
pRed.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.RED) |
|||
.replaceAll("<team>", teams.get(ChatColor.RED).getTeamName())); |
|||
} |
|||
ArrayList<String> pBlue = new ArrayList<String>(); |
|||
TruenoHologram phBlue = TruenoHologramAPI.getNewHologram(); |
|||
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) { |
|||
pBlue.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.BLUE) |
|||
.replaceAll("<team>", teams.get(ChatColor.BLUE).getTeamName())); |
|||
} |
|||
ArrayList<String> pGreen = new ArrayList<String>(); |
|||
TruenoHologram phGreen = TruenoHologramAPI.getNewHologram(); |
|||
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) { |
|||
pGreen.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.GREEN) |
|||
.replaceAll("<team>", teams.get(ChatColor.GREEN).getTeamName())); |
|||
} |
|||
ArrayList<String> pYellow = new ArrayList<String>(); |
|||
TruenoHologram phYellow = TruenoHologramAPI.getNewHologram(); |
|||
for (String portal : plugin.getLang().getList("holograms.portal.you")) { |
|||
pYellow.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.YELLOW) |
|||
.replaceAll("<team>", plugin.getLang().get("holograms.your"))); |
|||
} |
|||
phBlue.setupPlayerHologram(p, hBlue, pBlue); |
|||
phBlue.display(); |
|||
phRed.setupPlayerHologram(p, hRed, pRed); |
|||
phRed.display(); |
|||
phGreen.setupPlayerHologram(p, hGreen, pGreen); |
|||
phGreen.display(); |
|||
phYellow.setupPlayerHologram(p, hYellow, pYellow); |
|||
phYellow.display(); |
|||
holograms.add(phRed); |
|||
holograms.add(phBlue); |
|||
holograms.add(phGreen); |
|||
holograms.add(phYellow); |
|||
} |
|||
} |
|||
teams.get(ChatColor.RED).createPortal(); |
|||
teams.get(ChatColor.BLUE).createPortal(); |
|||
teams.get(ChatColor.YELLOW).createPortal(); |
|||
teams.get(ChatColor.GREEN).createPortal(); |
|||
} |
|||
starting--; |
|||
} |
|||
if (isState(FState.PREGAME)) { |
|||
for (Player p : players) { |
|||
updateSB(p); |
|||
} |
|||
if (prestart == 10 || prestart == 5 || prestart == 4 || prestart == 3 || prestart == 2) { |
|||
for (Player p : players) { |
|||
p.sendMessage( |
|||
plugin.getLang().get(p, "messages.prestart").replaceAll("<time>", String.valueOf(prestart)) |
|||
.replaceAll("<units>", plugin.getLang().get(p, "units.seconds"))); |
|||
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.prestart")), 1.0f, |
|||
1.0f); |
|||
plugin.getTM().sendPreTitle(p, prestart, true); |
|||
} |
|||
} |
|||
if (prestart == 1) { |
|||
for (Player p : players) { |
|||
p.sendMessage( |
|||
plugin.getLang().get(p, "messages.prestart").replaceAll("<time>", String.valueOf(prestart)) |
|||
.replaceAll("<units>", plugin.getLang().get(p, "units.second"))); |
|||
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.prestart")), 1.0f, |
|||
1.0f); |
|||
plugin.getTM().sendPreTitle(p, prestart, false); |
|||
for (String msg : plugin.getLang().getList("messages.startFour")) { |
|||
CenterMessage.sendCenteredMessage(p, msg.replaceAll("&", "§").replaceAll("<heart>", "❤")); |
|||
} |
|||
} |
|||
} |
|||
if (prestart == 0) { |
|||
setState(FState.INGAME); |
|||
updateSign(); |
|||
for (Player p : players) { |
|||
p.setGameMode(GameMode.SURVIVAL); |
|||
} |
|||
if (plugin.isCage()) { |
|||
for (TeamFour team : teams.values()) { |
|||
if (team.isCage()) { |
|||
team.removeCage(); |
|||
team.setCage(false); |
|||
} |
|||
} |
|||
} else { |
|||
for (ChatColor color : teams.keySet()) { |
|||
plugin.getGLM().removeGlass(teams.get(color).getTeamSpawn()); |
|||
} |
|||
} |
|||
} |
|||
prestart--; |
|||
} |
|||
} |
|||
|
|||
public void addPlayerTeam(Player p, TeamFour t) { |
|||
t.addPlayer(p); |
|||
teamPlayer.put(p, t.getColor()); |
|||
} |
|||
|
|||
public void addRandomTeam(Player p) { |
|||
TeamFour red = teams.get(ChatColor.RED); |
|||
TeamFour blue = teams.get(ChatColor.BLUE); |
|||
TeamFour green = teams.get(ChatColor.GREEN); |
|||
TeamFour yellow = teams.get(ChatColor.YELLOW); |
|||
if (red.getTeamSize() <= blue.getTeamSize() && red.getTeamSize() <= green.getTeamSize() |
|||
&& red.getTeamSize() <= yellow.getTeamSize()) { |
|||
red.addPlayer(p); |
|||
teamPlayer.put(p, red.getColor()); |
|||
} else if (blue.getTeamSize() <= red.getTeamSize() && blue.getTeamSize() <= green.getTeamSize() |
|||
&& blue.getTeamSize() <= yellow.getTeamSize()) { |
|||
blue.addPlayer(p); |
|||
teamPlayer.put(p, blue.getColor()); |
|||
} else if (green.getTeamSize() <= red.getTeamSize() && green.getTeamSize() <= blue.getTeamSize() |
|||
&& green.getTeamSize() <= yellow.getTeamSize()) { |
|||
green.addPlayer(p); |
|||
teamPlayer.put(p, green.getColor()); |
|||
} else { |
|||
yellow.addPlayer(p); |
|||
teamPlayer.put(p, yellow.getColor()); |
|||
} |
|||
} |
|||
|
|||
public TeamFour getTeamPlayer(Player p) { |
|||
return teams.get(teamPlayer.get(p)); |
|||
} |
|||
|
|||
public HashMap<ChatColor, TeamFour> getTeams() { |
|||
return teams; |
|||
} |
|||
|
|||
public Location getLobby() { |
|||
return lobby; |
|||
} |
|||
|
|||
public Location getSpect() { |
|||
return spect; |
|||
} |
|||
|
|||
public String getName() { |
|||
return name; |
|||
} |
|||
|
|||
public int getMax() { |
|||
return max; |
|||
} |
|||
|
|||
public int getMin() { |
|||
return min; |
|||
} |
|||
|
|||
public Main get() { |
|||
return plugin; |
|||
} |
|||
|
|||
public FState getState() { |
|||
return this.state; |
|||
} |
|||
|
|||
public void setState(FState state) { |
|||
this.state = state; |
|||
} |
|||
|
|||
public boolean isState(FState state) { |
|||
if (this.state == state) { |
|||
return true; |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
public int getGoals(Player p) { |
|||
return goals.get(p); |
|||
} |
|||
|
|||
public int getKills(Player p) { |
|||
return kills.get(p); |
|||
} |
|||
|
|||
public void addGoal(Player p) { |
|||
goals.put(p, goals.get(p) + 1); |
|||
updateSB(p); |
|||
} |
|||
|
|||
public void addKill(Player p) { |
|||
kills.put(p, kills.get(p) + 1); |
|||
updateSB(p); |
|||
} |
|||
|
|||
public enum FState { |
|||
WAITING, STARTING, PREGAME, INGAME, FINISH, RESTARTING; |
|||
} |
|||
|
|||
public int getTeamsAlive() { |
|||
int cantidad = 0; |
|||
for (TeamFour team : teams.values()) { |
|||
if (team.getTeamSize() == 0) { |
|||
team.setDeath(true); |
|||
continue; |
|||
} |
|||
if (!team.getDeath() || team.getTeamSize() > 0) { |
|||
cantidad++; |
|||
} |
|||
} |
|||
return cantidad; |
|||
} |
|||
|
|||
public TeamFour getLastTeam() { |
|||
for (TeamFour team : teams.values()) { |
|||
if (team.getTeamSize() > 0) { |
|||
return team; |
|||
} |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
public void removeAllPlayerTeam(Player p) { |
|||
for (TeamFour t : teams.values()) { |
|||
if (t.getTeamPlayers().contains(p)) { |
|||
t.removePlayer(p); |
|||
} |
|||
} |
|||
} |
|||
|
|||
public ArrayList<Player> getPlayers() { |
|||
return players; |
|||
} |
|||
|
|||
public ArrayList<Player> getSpects() { |
|||
return spects; |
|||
} |
|||
|
|||
public void setSpect(Player p) { |
|||
Utils.setCleanPlayer(p); |
|||
removeAllPlayerTeam(p); |
|||
spects.add(p); |
|||
for (Player on : players) { |
|||
on.hidePlayer(p); |
|||
} |
|||
for (Player on : spects) { |
|||
on.hidePlayer(p); |
|||
} |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
giveSpectItems(p); |
|||
} |
|||
}.runTaskLater(plugin, 5); |
|||
} |
|||
|
|||
public void giveSpectItems(Player p) { |
|||
ItemStack team = ItemBuilder.item(Material.COMPASS, 1, (short) 0, |
|||
plugin.getLang().get("items.spectate.nameItem"), plugin.getLang().get("items.spectate.loreItem")); |
|||
ItemStack option = ItemBuilder.item(Material.REDSTONE_COMPARATOR, 1, (short) 0, |
|||
plugin.getLang().get("items.config.nameItem"), plugin.getLang().get("items.config.loreItem")); |
|||
ItemStack leave = ItemBuilder.item(Material.BED, 1, (short) 0, plugin.getLang().get("items.leave.nameItem"), |
|||
plugin.getLang().get("items.leave.loreItem")); |
|||
p.getInventory().setItem(0, team); |
|||
p.getInventory().setItem(4, option); |
|||
p.getInventory().setItem(8, leave); |
|||
} |
|||
|
|||
public void givePlayerItems(Player p) { |
|||
ItemStack team = ItemBuilder.item(Material.PAPER, 1, (short) 0, plugin.getLang().get("items.teams.nameItem"), |
|||
plugin.getLang().get("items.teams.loreItem")); |
|||
ItemStack leave = ItemBuilder.item(Material.BED, 1, (short) 0, plugin.getLang().get("items.leave.nameItem"), |
|||
plugin.getLang().get("items.leave.loreItem")); |
|||
p.getInventory().setItem(0, team); |
|||
p.getInventory().setItem(8, leave); |
|||
} |
|||
|
|||
public void giveKit(Player p, TeamFour team) { |
|||
ItemStack peche = new ItemStack(Material.LEATHER_CHESTPLATE, 1); |
|||
LeatherArmorMeta pecheM = (LeatherArmorMeta) peche.getItemMeta(); |
|||
pecheM.setColor(team.getFColor()); |
|||
peche.setItemMeta(pecheM); |
|||
ItemStack panta = new ItemStack(Material.LEATHER_LEGGINGS, 1); |
|||
LeatherArmorMeta pantaM = (LeatherArmorMeta) panta.getItemMeta(); |
|||
pantaM.setColor(team.getFColor()); |
|||
panta.setItemMeta(pantaM); |
|||
ItemStack boots = new ItemStack(Material.LEATHER_BOOTS, 1); |
|||
LeatherArmorMeta bootsM = (LeatherArmorMeta) boots.getItemMeta(); |
|||
bootsM.setColor(team.getFColor()); |
|||
boots.setItemMeta(bootsM); |
|||
p.getInventory().setChestplate(peche); |
|||
p.getInventory().setLeggings(panta); |
|||
p.getInventory().setBoots(boots); |
|||
if (PlayerStat.getPlayerStat(p).getHotbar() == null) { |
|||
ItemStack[] items = plugin.getGM().getKit().getContents(); |
|||
for (int slot = 0; slot < 35; slot++) { |
|||
ItemStack item = items[slot]; |
|||
if (item == null || item.getType() == Material.BARRIER) { |
|||
p.getInventory().setItem(slot, new ItemStack(Material.AIR)); |
|||
continue; |
|||
} |
|||
if (item.getType().equals(Material.STAINED_CLAY)) { |
|||
ItemStack item2 = new ItemStack(item.getType(), item.getAmount(), getColor(team.getFColor())); |
|||
p.getInventory().setItem(slot, item2); |
|||
continue; |
|||
} |
|||
p.getInventory().setItem(slot, item); |
|||
} |
|||
} else { |
|||
ItemStack[] items = PlayerStat.getPlayerStat(p).getHotbar(); |
|||
for (int slot = 0; slot < 35; slot++) { |
|||
ItemStack item = items[slot]; |
|||
if (item == null || item.getType() == Material.BARRIER) { |
|||
p.getInventory().setItem(slot, new ItemStack(Material.AIR)); |
|||
continue; |
|||
} |
|||
if (item.getType().equals(Material.STAINED_CLAY)) { |
|||
ItemStack item2 = new ItemStack(item.getType(), item.getAmount(), getColor(team.getFColor())); |
|||
p.getInventory().setItem(slot, item2); |
|||
continue; |
|||
} |
|||
p.getInventory().setItem(slot, item); |
|||
} |
|||
} |
|||
} |
|||
|
|||
public void addPlace(Location loc) { |
|||
placed.add(loc); |
|||
} |
|||
|
|||
public ArrayList<Location> getPlaced() { |
|||
return placed; |
|||
} |
|||
|
|||
public byte getColor(Color color) { |
|||
if (color.equals(Color.RED)) { |
|||
return 14; |
|||
} |
|||
if (color.equals(Color.BLUE)) { |
|||
return 11; |
|||
} |
|||
if (color.equals(Color.YELLOW)) { |
|||
return 4; |
|||
} |
|||
if (color.equals(Color.GREEN)) { |
|||
return 5; |
|||
} |
|||
return 0; |
|||
} |
|||
|
|||
public int getTeamSize() { |
|||
return teamSize; |
|||
} |
|||
|
|||
public ArrayList<Location> getBuild() { |
|||
return build; |
|||
} |
|||
|
|||
public int getStarting() { |
|||
return starting; |
|||
} |
|||
|
|||
public HashMap<Player, PlayerData> getPD() { |
|||
return pd; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,83 @@ |
|||
package cx.sfy.TheBridge.game; |
|||
|
|||
import java.util.HashMap; |
|||
import java.util.UUID; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.event.inventory.InventoryType; |
|||
import org.bukkit.inventory.Inventory; |
|||
import org.bukkit.inventory.ItemStack; |
|||
import org.bukkit.scheduler.BukkitRunnable; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
|
|||
public class InventoryData { |
|||
|
|||
private static HashMap<Player, InventoryData> inventoryData = new HashMap<Player, InventoryData>(); |
|||
private UUID uuid; |
|||
private Inventory inv; |
|||
private ItemStack[] armor; |
|||
private boolean restored; |
|||
|
|||
public InventoryData(Player p) { |
|||
this.uuid = p.getUniqueId(); |
|||
this.armor = p.getInventory().getArmorContents(); |
|||
this.restored = false; |
|||
this.inv = Bukkit.createInventory(null, InventoryType.PLAYER, p.getName()); |
|||
this.inv.setContents(p.getInventory().getContents()); |
|||
inventoryData.put(p, this); |
|||
p.getInventory().clear(); |
|||
p.getInventory().setArmorContents(null); |
|||
} |
|||
|
|||
public void restore() { |
|||
if (!restored) { |
|||
Player p = this.getPlayer(); |
|||
if (p == null) { |
|||
return; |
|||
} |
|||
if (Main.get().isStop()) { |
|||
p.getInventory().setContents(inv.getContents()); |
|||
p.getInventory().setArmorContents(armor); |
|||
p.updateInventory(); |
|||
return; |
|||
} |
|||
p.getInventory().clear(); |
|||
p.getInventory().setArmorContents(null); |
|||
restored = true; |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
p.getInventory().setContents(inv.getContents()); |
|||
p.getInventory().setArmorContents(armor); |
|||
p.updateInventory(); |
|||
} |
|||
}.runTaskLater(Main.get(), 1); |
|||
} |
|||
} |
|||
|
|||
public Player getPlayer() { |
|||
return Bukkit.getPlayer(uuid); |
|||
} |
|||
|
|||
public UUID getUUID() { |
|||
return uuid; |
|||
} |
|||
|
|||
public static void remove(Player p) { |
|||
inventoryData.remove(p); |
|||
} |
|||
|
|||
public static HashMap<Player, InventoryData> getInventoryData() { |
|||
return inventoryData; |
|||
} |
|||
|
|||
public static InventoryData getInventoryData(Player p) { |
|||
if (inventoryData.containsKey(p)) { |
|||
return inventoryData.get(p); |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,83 @@ |
|||
package cx.sfy.TheBridge.game; |
|||
|
|||
import java.util.UUID; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.GameMode; |
|||
import org.bukkit.Location; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.event.inventory.InventoryType; |
|||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; |
|||
import org.bukkit.inventory.Inventory; |
|||
import org.bukkit.inventory.ItemStack; |
|||
import org.bukkit.scoreboard.Scoreboard; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.database.PlayerStat; |
|||
import cx.sfy.TheBridge.utils.Utils; |
|||
|
|||
public class PlayerData { |
|||
|
|||
private UUID uuid; |
|||
private double health; |
|||
private boolean fly; |
|||
private int food; |
|||
private Inventory inv; |
|||
private ItemStack[] armor; |
|||
private Scoreboard sb; |
|||
private GameMode gm; |
|||
private boolean restored; |
|||
private float flySpeed; |
|||
|
|||
public PlayerData(Player p) { |
|||
this.uuid = p.getUniqueId(); |
|||
this.sb = p.getScoreboard(); |
|||
this.food = p.getFoodLevel(); |
|||
this.health = p.getHealth(); |
|||
this.gm = p.getGameMode(); |
|||
this.armor = p.getInventory().getArmorContents(); |
|||
this.flySpeed = p.getFlySpeed(); |
|||
this.fly = p.getAllowFlight(); |
|||
this.restored = false; |
|||
this.inv = Bukkit.createInventory(null, InventoryType.PLAYER, p.getName()); |
|||
this.inv.setContents(p.getInventory().getContents()); |
|||
} |
|||
|
|||
public void restore() { |
|||
if (!restored) { |
|||
Player p = this.getPlayer(); |
|||
if (p == null) { |
|||
return; |
|||
} |
|||
restored = true; |
|||
p.closeInventory(); |
|||
p.setGameMode(gm); |
|||
p.getInventory().clear(); |
|||
p.getInventory().setContents(inv.getContents()); |
|||
p.getInventory().setArmorContents(armor); |
|||
p.setFoodLevel(food); |
|||
p.setHealth(health); |
|||
p.resetPlayerTime(); |
|||
p.resetPlayerWeather(); |
|||
p.setFlySpeed(flySpeed); |
|||
p.setAllowFlight(fly); |
|||
p.setFireTicks(0); |
|||
p.setScoreboard(sb); |
|||
Location respawn = Main.get().getMainLobby(); |
|||
p.teleport(respawn, TeleportCause.END_PORTAL); |
|||
Utils.setPlayerExperience(p, PlayerStat.getPlayerStat(p).getXP()); |
|||
if (!Main.get().isStop()) { |
|||
Main.get().getTOP().createInfo(p); |
|||
} |
|||
} |
|||
} |
|||
|
|||
public Player getPlayer() { |
|||
return Bukkit.getPlayer(uuid); |
|||
} |
|||
|
|||
public UUID getUUID() { |
|||
return uuid; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,21 @@ |
|||
package cx.sfy.TheBridge.hologram; |
|||
|
|||
import java.util.ArrayList; |
|||
|
|||
import org.bukkit.Location; |
|||
import org.bukkit.entity.Player; |
|||
|
|||
public interface TruenoHologram { |
|||
|
|||
public void setupWorldHologram(Location loc, ArrayList<String> lines); |
|||
public void setupPlayerHologram(Player player, Location loc, ArrayList<String> lines); |
|||
public Location getLocation(); |
|||
public Player getPlayer(); |
|||
public void setDistanceBetweenLines(Double distance); |
|||
public void display(); |
|||
public void update(ArrayList<String> lines); |
|||
public void updateLine(int index, String text); |
|||
public void removeLine(int index); |
|||
public void delete(); |
|||
|
|||
} |
@ -0,0 +1,46 @@ |
|||
package cx.sfy.TheBridge.hologram; |
|||
|
|||
import java.util.logging.Level; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
|
|||
import cx.sfy.TheBridge.hologram.TruenoHologram_v1_10_R1; |
|||
import cx.sfy.TheBridge.hologram.TruenoHologram_v1_11_R1; |
|||
import cx.sfy.TheBridge.hologram.TruenoHologram_v1_8_R3; |
|||
import cx.sfy.TheBridge.hologram.TruenoHologram_v1_9_R2; |
|||
import net.md_5.bungee.api.ChatColor; |
|||
|
|||
public class TruenoHologramAPI { |
|||
|
|||
private static String version; |
|||
|
|||
private static void setupVersion(){ |
|||
try { |
|||
version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3]; |
|||
} catch (ArrayIndexOutOfBoundsException ex) { |
|||
ex.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
public static TruenoHologram getNewHologram(){ |
|||
if(version==null){ |
|||
setupVersion(); |
|||
} |
|||
if (version.equals("v1_8_R3")) { |
|||
return new TruenoHologram_v1_8_R3(); |
|||
} else if (version.equals("v1_9_R2")) { |
|||
return new TruenoHologram_v1_9_R2(); |
|||
} else if (version.equals("v1_10_R1")) { |
|||
return new TruenoHologram_v1_10_R1(); |
|||
} else if (version.equals("v1_11_R1")) { |
|||
return new TruenoHologram_v1_11_R1(); |
|||
} else if (version.equals("v1_12_R1")) { |
|||
return new TruenoHologram_v1_12_R1(); |
|||
} else { |
|||
Bukkit.getLogger().log(Level.SEVERE, ChatColor.RED + "Unsopported server version."); |
|||
return null; |
|||
} |
|||
|
|||
} |
|||
|
|||
} |
@ -0,0 +1,283 @@ |
|||
package cx.sfy.TheBridge.hologram; |
|||
|
|||
import java.util.ArrayList; |
|||
|
|||
import org.bukkit.Location; |
|||
import org.bukkit.craftbukkit.v1_10_R1.CraftWorld; |
|||
import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer; |
|||
import org.bukkit.entity.ArmorStand; |
|||
import org.bukkit.entity.EntityType; |
|||
import org.bukkit.entity.Player; |
|||
|
|||
import cx.sfy.TheBridge.hologram.TruenoHologram; |
|||
import net.minecraft.server.v1_10_R1.EntityArmorStand; |
|||
import net.minecraft.server.v1_10_R1.PacketPlayOutEntityDestroy; |
|||
import net.minecraft.server.v1_10_R1.PacketPlayOutSpawnEntityLiving; |
|||
import net.minecraft.server.v1_10_R1.WorldServer; |
|||
|
|||
public class TruenoHologram_v1_10_R1 implements TruenoHologram{ |
|||
|
|||
private Location location; |
|||
private ArrayList<String> lines; |
|||
private double linesdistance = 0.30; |
|||
|
|||
private ArrayList<ArmorStand> armor_lines = new ArrayList<ArmorStand>(); |
|||
private ArrayList<EntityArmorStand> NmsArmorLines = new ArrayList<EntityArmorStand>(); |
|||
|
|||
private Player player = null; |
|||
|
|||
@Override |
|||
public void setupWorldHologram(Location loc, ArrayList<String> lines) { |
|||
this.location = loc.clone(); |
|||
this.lines = lines; |
|||
|
|||
} |
|||
|
|||
@Override |
|||
public void setupPlayerHologram(Player player, Location loc, ArrayList<String> lines) { |
|||
this.player = player; |
|||
this.location = loc.clone(); |
|||
this.lines = lines; |
|||
|
|||
} |
|||
|
|||
public Location getLocation(){ |
|||
return this.location; |
|||
} |
|||
|
|||
public Player getPlayer(){ |
|||
return player; |
|||
} |
|||
|
|||
private void NmsDestroy(EntityArmorStand hololine){ |
|||
PacketPlayOutEntityDestroy packet = new PacketPlayOutEntityDestroy(hololine.getId()); |
|||
((CraftPlayer) this.player).getHandle().playerConnection.sendPacket(packet); |
|||
} |
|||
|
|||
private Location getNmsLocation(EntityArmorStand hololine){ |
|||
return new Location(hololine.getWorld().getWorld(), hololine.locX, hololine.locY, hololine.locZ); |
|||
} |
|||
|
|||
private void NmsSpawn(EntityArmorStand stand, String line, Location loc){ |
|||
stand.setLocation(loc.getX(), loc.getY(), loc.getZ(), 0, 0); |
|||
stand.setCustomName(line); |
|||
stand.setCustomNameVisible(true); |
|||
stand.setNoGravity(true); |
|||
stand.setSmall(true); |
|||
stand.setInvisible(true); |
|||
stand.setBasePlate(false); |
|||
stand.setArms(false); |
|||
if(!line.equals("")){ |
|||
PacketPlayOutSpawnEntityLiving packet = new PacketPlayOutSpawnEntityLiving(stand); |
|||
((CraftPlayer) this.player).getHandle().playerConnection.sendPacket(packet); |
|||
} |
|||
} |
|||
|
|||
private void spawn(){ |
|||
int ind = 0; |
|||
for(String line : lines){ |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(this.player!=null){ |
|||
if(ind>0) finalLoc = getNmsLocation(NmsArmorLines.get(ind-1)); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
WorldServer s = ((CraftWorld)this.location.getWorld()).getHandle(); |
|||
EntityArmorStand stand = new EntityArmorStand(s); |
|||
NmsSpawn(stand, line, finalLoc); |
|||
NmsArmorLines.add(stand); |
|||
} |
|||
else{ |
|||
if(ind>0) finalLoc = armor_lines.get(ind-1).getLocation(); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
ArmorStand Armorline = (ArmorStand) location.getWorld().spawnEntity(finalLoc, EntityType.ARMOR_STAND); |
|||
Armorline.setBasePlate(false); |
|||
Armorline.setCustomNameVisible(true); |
|||
Armorline.setGravity(false); |
|||
Armorline.setCanPickupItems(false); |
|||
Armorline.setCustomName(line); |
|||
Armorline.setSmall(true); |
|||
Armorline.setVisible(false); |
|||
armor_lines.add(Armorline); |
|||
if(line.equals("")) Armorline.remove(); |
|||
} |
|||
ind++; |
|||
} |
|||
} |
|||
|
|||
private void despawn(){ |
|||
if(this.player!=null){ |
|||
for(EntityArmorStand nmsStand : NmsArmorLines){ |
|||
NmsDestroy(nmsStand); |
|||
} |
|||
NmsArmorLines.clear(); |
|||
} |
|||
else{ |
|||
for(ArmorStand line : armor_lines){ |
|||
line.remove(); |
|||
} |
|||
armor_lines.clear(); |
|||
} |
|||
} |
|||
|
|||
public void setDistanceBetweenLines(Double distance){ |
|||
this.linesdistance = distance; |
|||
} |
|||
|
|||
public void display(){ |
|||
spawn(); |
|||
} |
|||
|
|||
public void update(ArrayList<String> lines){ |
|||
if(this.player != null){ |
|||
int ind = 0; |
|||
for(String newline : lines){ |
|||
if(this.lines.size()>= ind){ |
|||
String oldline = this.lines.get(ind); |
|||
if(!newline.equals(oldline)){ |
|||
if(!newline.equals("")){ |
|||
final EntityArmorStand oldstand = NmsArmorLines.get(ind); |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(ind>0) finalLoc = getNmsLocation(NmsArmorLines.get(ind-1)); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
WorldServer s = ((CraftWorld)this.location.getWorld()).getHandle(); |
|||
EntityArmorStand stand = new EntityArmorStand(s); |
|||
NmsSpawn(stand, newline, finalLoc); |
|||
this.NmsArmorLines.set(ind, stand); |
|||
this.lines.set(ind, newline); |
|||
NmsDestroy(oldstand); |
|||
} |
|||
else{ |
|||
this.lines.set(ind, newline); |
|||
final EntityArmorStand oldstand = NmsArmorLines.get(ind); |
|||
NmsDestroy(oldstand); |
|||
} |
|||
} |
|||
ind++; |
|||
} |
|||
else{ |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(ind>0) finalLoc = getNmsLocation(NmsArmorLines.get(ind-1)); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
WorldServer s = ((CraftWorld)this.location.getWorld()).getHandle(); |
|||
EntityArmorStand stand = new EntityArmorStand(s); |
|||
NmsSpawn(stand, newline, finalLoc); |
|||
this.NmsArmorLines.add(stand); |
|||
this.lines.add(newline); |
|||
} |
|||
} |
|||
if(lines.size() > this.lines.size()){ |
|||
int dif = lines.size() - this.lines.size(); |
|||
for(int in = 0; in <=dif; in++){ |
|||
int arrayind = (this.lines.size()-1)-in; |
|||
this.lines.remove(arrayind); |
|||
NmsDestroy(this.NmsArmorLines.get(arrayind)); |
|||
this.NmsArmorLines.remove(arrayind); |
|||
} |
|||
} |
|||
} |
|||
else{ |
|||
int ind = 0; |
|||
for(String newline : lines){ |
|||
if(this.lines.size()>= ind){ |
|||
String oldline = this.lines.get(ind); |
|||
if(!newline.equals(oldline)){ |
|||
if(newline != ""){ |
|||
this.armor_lines.get(ind).setCustomName(newline); |
|||
} |
|||
else{ |
|||
this.lines.set(ind, newline); |
|||
final ArmorStand oldstand = armor_lines.get(ind); |
|||
oldstand.remove(); |
|||
} |
|||
} |
|||
ind++; |
|||
} |
|||
else{ |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(ind>0) finalLoc = armor_lines.get(ind-1).getLocation(); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
ArmorStand Armorline = (ArmorStand) location.getWorld().spawnEntity(finalLoc, EntityType.ARMOR_STAND); |
|||
Armorline.setBasePlate(false); |
|||
Armorline.setCustomNameVisible(true); |
|||
Armorline.setGravity(false); |
|||
Armorline.setCanPickupItems(false); |
|||
Armorline.setCustomName(newline); |
|||
Armorline.setSmall(true); |
|||
Armorline.setVisible(false); |
|||
armor_lines.add(Armorline); |
|||
this.lines.add(newline); |
|||
} |
|||
} |
|||
if(lines.size() > this.lines.size()){ |
|||
int dif = lines.size() - this.lines.size(); |
|||
for(int in = 0; in <=dif; in++){ |
|||
int arrayind = (this.lines.size()-1)-in; |
|||
this.lines.remove(arrayind); |
|||
this.armor_lines.get(arrayind).remove(); |
|||
this.armor_lines.remove(arrayind); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
public void updateLine(int index, String text){ |
|||
if(this.lines.size() >= index){ |
|||
int realindex = (this.lines.size()-1)-index; |
|||
String oldtext = this.lines.get(realindex); |
|||
if(!text.equals(oldtext)){ |
|||
if(this.player != null){ |
|||
if(text != ""){ |
|||
final EntityArmorStand oldstand = NmsArmorLines.get(realindex); |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(realindex>0) finalLoc = getNmsLocation(NmsArmorLines.get(realindex-1)); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
WorldServer s = ((CraftWorld)this.location.getWorld()).getHandle(); |
|||
EntityArmorStand stand = new EntityArmorStand(s); |
|||
NmsSpawn(stand, text, finalLoc); |
|||
this.NmsArmorLines.set(realindex, stand); |
|||
NmsDestroy(oldstand); |
|||
} |
|||
else{ |
|||
this.lines.set(realindex, text); |
|||
final EntityArmorStand oldstand = NmsArmorLines.get(realindex); |
|||
NmsDestroy(oldstand); |
|||
} |
|||
} |
|||
else{ |
|||
if(text != ""){ |
|||
this.armor_lines.get(realindex).setCustomName(text); |
|||
} |
|||
else{ |
|||
final ArmorStand oldstand = armor_lines.get(realindex); |
|||
oldstand.remove(); |
|||
} |
|||
} |
|||
this.lines.set(realindex, text); |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
public void removeLine(int index){ |
|||
if(this.lines.size() >= index){ |
|||
int realindex = (this.lines.size()-1)-index; |
|||
if(this.player != null){ |
|||
final EntityArmorStand stand = NmsArmorLines.get(realindex); |
|||
this.NmsArmorLines.remove(stand); |
|||
NmsDestroy(stand); |
|||
} |
|||
else{ |
|||
this.armor_lines.get(realindex).remove(); |
|||
} |
|||
this.lines.remove(realindex); |
|||
} |
|||
} |
|||
|
|||
public void delete(){ |
|||
despawn(); |
|||
this.player = null; |
|||
this.NmsArmorLines = new ArrayList<EntityArmorStand>(); |
|||
this.armor_lines = new ArrayList<ArmorStand>(); |
|||
this.lines = new ArrayList<String>(); |
|||
this.location = null; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,283 @@ |
|||
package cx.sfy.TheBridge.hologram; |
|||
|
|||
import java.util.ArrayList; |
|||
|
|||
import org.bukkit.Location; |
|||
import org.bukkit.craftbukkit.v1_11_R1.CraftWorld; |
|||
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer; |
|||
import org.bukkit.entity.ArmorStand; |
|||
import org.bukkit.entity.EntityType; |
|||
import org.bukkit.entity.Player; |
|||
|
|||
import cx.sfy.TheBridge.hologram.TruenoHologram; |
|||
import net.minecraft.server.v1_11_R1.EntityArmorStand; |
|||
import net.minecraft.server.v1_11_R1.PacketPlayOutEntityDestroy; |
|||
import net.minecraft.server.v1_11_R1.PacketPlayOutSpawnEntityLiving; |
|||
import net.minecraft.server.v1_11_R1.WorldServer; |
|||
|
|||
public class TruenoHologram_v1_11_R1 implements TruenoHologram{ |
|||
|
|||
private Location location; |
|||
private ArrayList<String> lines; |
|||
private double linesdistance = 0.30; |
|||
|
|||
private ArrayList<ArmorStand> armor_lines = new ArrayList<ArmorStand>(); |
|||
private ArrayList<EntityArmorStand> NmsArmorLines = new ArrayList<EntityArmorStand>(); |
|||
|
|||
private Player player = null; |
|||
|
|||
@Override |
|||
public void setupWorldHologram(Location loc, ArrayList<String> lines) { |
|||
this.location = loc.clone(); |
|||
this.lines = lines; |
|||
|
|||
} |
|||
|
|||
@Override |
|||
public void setupPlayerHologram(Player player, Location loc, ArrayList<String> lines) { |
|||
this.player = player; |
|||
this.location = loc.clone(); |
|||
this.lines = lines; |
|||
|
|||
} |
|||
|
|||
public Location getLocation(){ |
|||
return this.location; |
|||
} |
|||
|
|||
public Player getPlayer(){ |
|||
return player; |
|||
} |
|||
|
|||
private void NmsDestroy(EntityArmorStand hololine){ |
|||
PacketPlayOutEntityDestroy packet = new PacketPlayOutEntityDestroy(hololine.getId()); |
|||
((CraftPlayer) this.player).getHandle().playerConnection.sendPacket(packet); |
|||
} |
|||
|
|||
private Location getNmsLocation(EntityArmorStand hololine){ |
|||
return new Location(hololine.getWorld().getWorld(), hololine.locX, hololine.locY, hololine.locZ); |
|||
} |
|||
|
|||
private void NmsSpawn(EntityArmorStand stand, String line, Location loc){ |
|||
stand.setLocation(loc.getX(), loc.getY(), loc.getZ(), 0, 0); |
|||
stand.setCustomName(line); |
|||
stand.setCustomNameVisible(true); |
|||
stand.setNoGravity(true); |
|||
stand.setSmall(true); |
|||
stand.setInvisible(true); |
|||
stand.setBasePlate(false); |
|||
stand.setArms(false); |
|||
if(!line.equals("")){ |
|||
PacketPlayOutSpawnEntityLiving packet = new PacketPlayOutSpawnEntityLiving(stand); |
|||
((CraftPlayer) this.player).getHandle().playerConnection.sendPacket(packet); |
|||
} |
|||
} |
|||
|
|||
private void spawn(){ |
|||
int ind = 0; |
|||
for(String line : lines){ |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(this.player!=null){ |
|||
if(ind>0) finalLoc = getNmsLocation(NmsArmorLines.get(ind-1)); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
WorldServer s = ((CraftWorld)this.location.getWorld()).getHandle(); |
|||
EntityArmorStand stand = new EntityArmorStand(s); |
|||
NmsSpawn(stand, line, finalLoc); |
|||
NmsArmorLines.add(stand); |
|||
} |
|||
else{ |
|||
if(ind>0) finalLoc = armor_lines.get(ind-1).getLocation(); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
ArmorStand Armorline = (ArmorStand) location.getWorld().spawnEntity(finalLoc, EntityType.ARMOR_STAND); |
|||
Armorline.setBasePlate(false); |
|||
Armorline.setCustomNameVisible(true); |
|||
Armorline.setGravity(false); |
|||
Armorline.setCanPickupItems(false); |
|||
Armorline.setCustomName(line); |
|||
Armorline.setSmall(true); |
|||
Armorline.setVisible(false); |
|||
armor_lines.add(Armorline); |
|||
if(line.equals("")) Armorline.remove(); |
|||
} |
|||
ind++; |
|||
} |
|||
} |
|||
|
|||
private void despawn(){ |
|||
if(this.player!=null){ |
|||
for(EntityArmorStand nmsStand : NmsArmorLines){ |
|||
NmsDestroy(nmsStand); |
|||
} |
|||
NmsArmorLines.clear(); |
|||
} |
|||
else{ |
|||
for(ArmorStand line : armor_lines){ |
|||
line.remove(); |
|||
} |
|||
armor_lines.clear(); |
|||
} |
|||
} |
|||
|
|||
public void setDistanceBetweenLines(Double distance){ |
|||
this.linesdistance = distance; |
|||
} |
|||
|
|||
public void display(){ |
|||
spawn(); |
|||
} |
|||
|
|||
public void update(ArrayList<String> lines){ |
|||
if(this.player != null){ |
|||
int ind = 0; |
|||
for(String newline : lines){ |
|||
if(this.lines.size()>= ind){ |
|||
String oldline = this.lines.get(ind); |
|||
if(!newline.equals(oldline)){ |
|||
if(!newline.equals("")){ |
|||
final EntityArmorStand oldstand = NmsArmorLines.get(ind); |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(ind>0) finalLoc = getNmsLocation(NmsArmorLines.get(ind-1)); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
WorldServer s = ((CraftWorld)this.location.getWorld()).getHandle(); |
|||
EntityArmorStand stand = new EntityArmorStand(s); |
|||
NmsSpawn(stand, newline, finalLoc); |
|||
this.NmsArmorLines.set(ind, stand); |
|||
this.lines.set(ind, newline); |
|||
NmsDestroy(oldstand); |
|||
} |
|||
else{ |
|||
this.lines.set(ind, newline); |
|||
final EntityArmorStand oldstand = NmsArmorLines.get(ind); |
|||
NmsDestroy(oldstand); |
|||
} |
|||
} |
|||
ind++; |
|||
} |
|||
else{ |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(ind>0) finalLoc = getNmsLocation(NmsArmorLines.get(ind-1)); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
WorldServer s = ((CraftWorld)this.location.getWorld()).getHandle(); |
|||
EntityArmorStand stand = new EntityArmorStand(s); |
|||
NmsSpawn(stand, newline, finalLoc); |
|||
this.NmsArmorLines.add(stand); |
|||
this.lines.add(newline); |
|||
} |
|||
} |
|||
if(lines.size() > this.lines.size()){ |
|||
int dif = lines.size() - this.lines.size(); |
|||
for(int in = 0; in <=dif; in++){ |
|||
int arrayind = (this.lines.size()-1)-in; |
|||
this.lines.remove(arrayind); |
|||
NmsDestroy(this.NmsArmorLines.get(arrayind)); |
|||
this.NmsArmorLines.remove(arrayind); |
|||
} |
|||
} |
|||
} |
|||
else{ |
|||
int ind = 0; |
|||
for(String newline : lines){ |
|||
if(this.lines.size()>= ind){ |
|||
String oldline = this.lines.get(ind); |
|||
if(!newline.equals(oldline)){ |
|||
if(newline != ""){ |
|||
this.armor_lines.get(ind).setCustomName(newline); |
|||
} |
|||
else{ |
|||
this.lines.set(ind, newline); |
|||
final ArmorStand oldstand = armor_lines.get(ind); |
|||
oldstand.remove(); |
|||
} |
|||
} |
|||
ind++; |
|||
} |
|||
else{ |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(ind>0) finalLoc = armor_lines.get(ind-1).getLocation(); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
ArmorStand Armorline = (ArmorStand) location.getWorld().spawnEntity(finalLoc, EntityType.ARMOR_STAND); |
|||
Armorline.setBasePlate(false); |
|||
Armorline.setCustomNameVisible(true); |
|||
Armorline.setGravity(false); |
|||
Armorline.setCanPickupItems(false); |
|||
Armorline.setCustomName(newline); |
|||
Armorline.setSmall(true); |
|||
Armorline.setVisible(false); |
|||
armor_lines.add(Armorline); |
|||
this.lines.add(newline); |
|||
} |
|||
} |
|||
if(lines.size() > this.lines.size()){ |
|||
int dif = lines.size() - this.lines.size(); |
|||
for(int in = 0; in <=dif; in++){ |
|||
int arrayind = (this.lines.size()-1)-in; |
|||
this.lines.remove(arrayind); |
|||
this.armor_lines.get(arrayind).remove(); |
|||
this.armor_lines.remove(arrayind); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
public void updateLine(int index, String text){ |
|||
if(this.lines.size() >= index){ |
|||
int realindex = (this.lines.size()-1)-index; |
|||
String oldtext = this.lines.get(realindex); |
|||
if(!text.equals(oldtext)){ |
|||
if(this.player != null){ |
|||
if(text != ""){ |
|||
final EntityArmorStand oldstand = NmsArmorLines.get(realindex); |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(realindex>0) finalLoc = getNmsLocation(NmsArmorLines.get(realindex-1)); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
WorldServer s = ((CraftWorld)this.location.getWorld()).getHandle(); |
|||
EntityArmorStand stand = new EntityArmorStand(s); |
|||
NmsSpawn(stand, text, finalLoc); |
|||
this.NmsArmorLines.set(realindex, stand); |
|||
NmsDestroy(oldstand); |
|||
} |
|||
else{ |
|||
this.lines.set(realindex, text); |
|||
final EntityArmorStand oldstand = NmsArmorLines.get(realindex); |
|||
NmsDestroy(oldstand); |
|||
} |
|||
} |
|||
else{ |
|||
if(text != ""){ |
|||
this.armor_lines.get(realindex).setCustomName(text); |
|||
} |
|||
else{ |
|||
final ArmorStand oldstand = armor_lines.get(realindex); |
|||
oldstand.remove(); |
|||
} |
|||
} |
|||
this.lines.set(realindex, text); |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
public void removeLine(int index){ |
|||
if(this.lines.size() >= index){ |
|||
int realindex = (this.lines.size()-1)-index; |
|||
if(this.player != null){ |
|||
final EntityArmorStand stand = NmsArmorLines.get(realindex); |
|||
this.NmsArmorLines.remove(stand); |
|||
NmsDestroy(stand); |
|||
} |
|||
else{ |
|||
this.armor_lines.get(realindex).remove(); |
|||
} |
|||
this.lines.remove(realindex); |
|||
} |
|||
} |
|||
|
|||
public void delete(){ |
|||
despawn(); |
|||
this.player = null; |
|||
this.NmsArmorLines = new ArrayList<EntityArmorStand>(); |
|||
this.armor_lines = new ArrayList<ArmorStand>(); |
|||
this.lines = new ArrayList<String>(); |
|||
this.location = null; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,283 @@ |
|||
package cx.sfy.TheBridge.hologram; |
|||
|
|||
import java.util.ArrayList; |
|||
|
|||
import org.bukkit.Location; |
|||
import org.bukkit.craftbukkit.v1_12_R1.CraftWorld; |
|||
import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; |
|||
import org.bukkit.entity.ArmorStand; |
|||
import org.bukkit.entity.EntityType; |
|||
import org.bukkit.entity.Player; |
|||
|
|||
import cx.sfy.TheBridge.hologram.TruenoHologram; |
|||
import net.minecraft.server.v1_12_R1.EntityArmorStand; |
|||
import net.minecraft.server.v1_12_R1.PacketPlayOutEntityDestroy; |
|||
import net.minecraft.server.v1_12_R1.PacketPlayOutSpawnEntityLiving; |
|||
import net.minecraft.server.v1_12_R1.WorldServer; |
|||
|
|||
public class TruenoHologram_v1_12_R1 implements TruenoHologram{ |
|||
|
|||
private Location location; |
|||
private ArrayList<String> lines; |
|||
private double linesdistance = 0.30; |
|||
|
|||
private ArrayList<ArmorStand> armor_lines = new ArrayList<ArmorStand>(); |
|||
private ArrayList<EntityArmorStand> NmsArmorLines = new ArrayList<EntityArmorStand>(); |
|||
|
|||
private Player player = null; |
|||
|
|||
@Override |
|||
public void setupWorldHologram(Location loc, ArrayList<String> lines) { |
|||
this.location = loc.clone(); |
|||
this.lines = lines; |
|||
|
|||
} |
|||
|
|||
@Override |
|||
public void setupPlayerHologram(Player player, Location loc, ArrayList<String> lines) { |
|||
this.player = player; |
|||
this.location = loc.clone(); |
|||
this.lines = lines; |
|||
|
|||
} |
|||
|
|||
public Location getLocation(){ |
|||
return this.location; |
|||
} |
|||
|
|||
public Player getPlayer(){ |
|||
return player; |
|||
} |
|||
|
|||
private void NmsDestroy(EntityArmorStand hololine){ |
|||
PacketPlayOutEntityDestroy packet = new PacketPlayOutEntityDestroy(hololine.getId()); |
|||
((CraftPlayer) this.player).getHandle().playerConnection.sendPacket(packet); |
|||
} |
|||
|
|||
private Location getNmsLocation(EntityArmorStand hololine){ |
|||
return new Location(hololine.getWorld().getWorld(), hololine.locX, hololine.locY, hololine.locZ); |
|||
} |
|||
|
|||
private void NmsSpawn(EntityArmorStand stand, String line, Location loc){ |
|||
stand.setLocation(loc.getX(), loc.getY(), loc.getZ(), 0, 0); |
|||
stand.setCustomName(line); |
|||
stand.setCustomNameVisible(true); |
|||
stand.setNoGravity(true); |
|||
stand.setSmall(true); |
|||
stand.setInvisible(true); |
|||
stand.setBasePlate(false); |
|||
stand.setArms(false); |
|||
if(!line.equals("")){ |
|||
PacketPlayOutSpawnEntityLiving packet = new PacketPlayOutSpawnEntityLiving(stand); |
|||
((CraftPlayer) this.player).getHandle().playerConnection.sendPacket(packet); |
|||
} |
|||
} |
|||
|
|||
private void spawn(){ |
|||
int ind = 0; |
|||
for(String line : lines){ |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(this.player!=null){ |
|||
if(ind>0) finalLoc = getNmsLocation(NmsArmorLines.get(ind-1)); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
WorldServer s = ((CraftWorld)this.location.getWorld()).getHandle(); |
|||
EntityArmorStand stand = new EntityArmorStand(s); |
|||
NmsSpawn(stand, line, finalLoc); |
|||
NmsArmorLines.add(stand); |
|||
} |
|||
else{ |
|||
if(ind>0) finalLoc = armor_lines.get(ind-1).getLocation(); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
ArmorStand Armorline = (ArmorStand) location.getWorld().spawnEntity(finalLoc, EntityType.ARMOR_STAND); |
|||
Armorline.setBasePlate(false); |
|||
Armorline.setCustomNameVisible(true); |
|||
Armorline.setGravity(false); |
|||
Armorline.setCanPickupItems(false); |
|||
Armorline.setCustomName(line); |
|||
Armorline.setSmall(true); |
|||
Armorline.setVisible(false); |
|||
armor_lines.add(Armorline); |
|||
if(line.equals("")) Armorline.remove(); |
|||
} |
|||
ind++; |
|||
} |
|||
} |
|||
|
|||
private void despawn(){ |
|||
if(this.player!=null){ |
|||
for(EntityArmorStand nmsStand : NmsArmorLines){ |
|||
NmsDestroy(nmsStand); |
|||
} |
|||
NmsArmorLines.clear(); |
|||
} |
|||
else{ |
|||
for(ArmorStand line : armor_lines){ |
|||
line.remove(); |
|||
} |
|||
armor_lines.clear(); |
|||
} |
|||
} |
|||
|
|||
public void setDistanceBetweenLines(Double distance){ |
|||
this.linesdistance = distance; |
|||
} |
|||
|
|||
public void display(){ |
|||
spawn(); |
|||
} |
|||
|
|||
public void update(ArrayList<String> lines){ |
|||
if(this.player != null){ |
|||
int ind = 0; |
|||
for(String newline : lines){ |
|||
if(this.lines.size()>= ind){ |
|||
String oldline = this.lines.get(ind); |
|||
if(!newline.equals(oldline)){ |
|||
if(!newline.equals("")){ |
|||
final EntityArmorStand oldstand = NmsArmorLines.get(ind); |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(ind>0) finalLoc = getNmsLocation(NmsArmorLines.get(ind-1)); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
WorldServer s = ((CraftWorld)this.location.getWorld()).getHandle(); |
|||
EntityArmorStand stand = new EntityArmorStand(s); |
|||
NmsSpawn(stand, newline, finalLoc); |
|||
this.NmsArmorLines.set(ind, stand); |
|||
this.lines.set(ind, newline); |
|||
NmsDestroy(oldstand); |
|||
} |
|||
else{ |
|||
this.lines.set(ind, newline); |
|||
final EntityArmorStand oldstand = NmsArmorLines.get(ind); |
|||
NmsDestroy(oldstand); |
|||
} |
|||
} |
|||
ind++; |
|||
} |
|||
else{ |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(ind>0) finalLoc = getNmsLocation(NmsArmorLines.get(ind-1)); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
WorldServer s = ((CraftWorld)this.location.getWorld()).getHandle(); |
|||
EntityArmorStand stand = new EntityArmorStand(s); |
|||
NmsSpawn(stand, newline, finalLoc); |
|||
this.NmsArmorLines.add(stand); |
|||
this.lines.add(newline); |
|||
} |
|||
} |
|||
if(lines.size() > this.lines.size()){ |
|||
int dif = lines.size() - this.lines.size(); |
|||
for(int in = 0; in <=dif; in++){ |
|||
int arrayind = (this.lines.size()-1)-in; |
|||
this.lines.remove(arrayind); |
|||
NmsDestroy(this.NmsArmorLines.get(arrayind)); |
|||
this.NmsArmorLines.remove(arrayind); |
|||
} |
|||
} |
|||
} |
|||
else{ |
|||
int ind = 0; |
|||
for(String newline : lines){ |
|||
if(this.lines.size()>= ind){ |
|||
String oldline = this.lines.get(ind); |
|||
if(!newline.equals(oldline)){ |
|||
if(newline != ""){ |
|||
this.armor_lines.get(ind).setCustomName(newline); |
|||
} |
|||
else{ |
|||
this.lines.set(ind, newline); |
|||
final ArmorStand oldstand = armor_lines.get(ind); |
|||
oldstand.remove(); |
|||
} |
|||
} |
|||
ind++; |
|||
} |
|||
else{ |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(ind>0) finalLoc = armor_lines.get(ind-1).getLocation(); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
ArmorStand Armorline = (ArmorStand) location.getWorld().spawnEntity(finalLoc, EntityType.ARMOR_STAND); |
|||
Armorline.setBasePlate(false); |
|||
Armorline.setCustomNameVisible(true); |
|||
Armorline.setGravity(false); |
|||
Armorline.setCanPickupItems(false); |
|||
Armorline.setCustomName(newline); |
|||
Armorline.setSmall(true); |
|||
Armorline.setVisible(false); |
|||
armor_lines.add(Armorline); |
|||
this.lines.add(newline); |
|||
} |
|||
} |
|||
if(lines.size() > this.lines.size()){ |
|||
int dif = lines.size() - this.lines.size(); |
|||
for(int in = 0; in <=dif; in++){ |
|||
int arrayind = (this.lines.size()-1)-in; |
|||
this.lines.remove(arrayind); |
|||
this.armor_lines.get(arrayind).remove(); |
|||
this.armor_lines.remove(arrayind); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
public void updateLine(int index, String text){ |
|||
if(this.lines.size() >= index){ |
|||
int realindex = (this.lines.size()-1)-index; |
|||
String oldtext = this.lines.get(realindex); |
|||
if(!text.equals(oldtext)){ |
|||
if(this.player != null){ |
|||
if(text != ""){ |
|||
final EntityArmorStand oldstand = NmsArmorLines.get(realindex); |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(realindex>0) finalLoc = getNmsLocation(NmsArmorLines.get(realindex-1)); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
WorldServer s = ((CraftWorld)this.location.getWorld()).getHandle(); |
|||
EntityArmorStand stand = new EntityArmorStand(s); |
|||
NmsSpawn(stand, text, finalLoc); |
|||
this.NmsArmorLines.set(realindex, stand); |
|||
NmsDestroy(oldstand); |
|||
} |
|||
else{ |
|||
this.lines.set(realindex, text); |
|||
final EntityArmorStand oldstand = NmsArmorLines.get(realindex); |
|||
NmsDestroy(oldstand); |
|||
} |
|||
} |
|||
else{ |
|||
if(text != ""){ |
|||
this.armor_lines.get(realindex).setCustomName(text); |
|||
} |
|||
else{ |
|||
final ArmorStand oldstand = armor_lines.get(realindex); |
|||
oldstand.remove(); |
|||
} |
|||
} |
|||
this.lines.set(realindex, text); |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
public void removeLine(int index){ |
|||
if(this.lines.size() >= index){ |
|||
int realindex = (this.lines.size()-1)-index; |
|||
if(this.player != null){ |
|||
final EntityArmorStand stand = NmsArmorLines.get(realindex); |
|||
this.NmsArmorLines.remove(stand); |
|||
NmsDestroy(stand); |
|||
} |
|||
else{ |
|||
this.armor_lines.get(realindex).remove(); |
|||
} |
|||
this.lines.remove(realindex); |
|||
} |
|||
} |
|||
|
|||
public void delete(){ |
|||
despawn(); |
|||
this.player = null; |
|||
this.NmsArmorLines = new ArrayList<EntityArmorStand>(); |
|||
this.armor_lines = new ArrayList<ArmorStand>(); |
|||
this.lines = new ArrayList<String>(); |
|||
this.location = null; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,283 @@ |
|||
package cx.sfy.TheBridge.hologram; |
|||
|
|||
import java.util.ArrayList; |
|||
|
|||
import org.bukkit.Location; |
|||
import org.bukkit.craftbukkit.v1_8_R3.CraftWorld; |
|||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; |
|||
import org.bukkit.entity.ArmorStand; |
|||
import org.bukkit.entity.EntityType; |
|||
import org.bukkit.entity.Player; |
|||
|
|||
import cx.sfy.TheBridge.hologram.TruenoHologram; |
|||
import net.minecraft.server.v1_8_R3.EntityArmorStand; |
|||
import net.minecraft.server.v1_8_R3.PacketPlayOutEntityDestroy; |
|||
import net.minecraft.server.v1_8_R3.PacketPlayOutSpawnEntityLiving; |
|||
import net.minecraft.server.v1_8_R3.WorldServer; |
|||
|
|||
public class TruenoHologram_v1_8_R3 implements TruenoHologram{ |
|||
|
|||
private Location location; |
|||
private ArrayList<String> lines; |
|||
private double linesdistance = 0.30; |
|||
|
|||
private ArrayList<ArmorStand> armor_lines = new ArrayList<ArmorStand>(); |
|||
private ArrayList<EntityArmorStand> NmsArmorLines = new ArrayList<EntityArmorStand>(); |
|||
|
|||
private Player player = null; |
|||
|
|||
@Override |
|||
public void setupWorldHologram(Location loc, ArrayList<String> lines) { |
|||
this.location = loc.clone(); |
|||
this.lines = lines; |
|||
|
|||
} |
|||
|
|||
@Override |
|||
public void setupPlayerHologram(Player player, Location loc, ArrayList<String> lines) { |
|||
this.player = player; |
|||
this.location = loc.clone(); |
|||
this.lines = lines; |
|||
|
|||
} |
|||
|
|||
public Location getLocation(){ |
|||
return this.location; |
|||
} |
|||
|
|||
public Player getPlayer(){ |
|||
return player; |
|||
} |
|||
|
|||
private void NmsDestroy(EntityArmorStand hololine){ |
|||
PacketPlayOutEntityDestroy packet = new PacketPlayOutEntityDestroy(hololine.getId()); |
|||
((CraftPlayer) this.player).getHandle().playerConnection.sendPacket(packet); |
|||
} |
|||
|
|||
private Location getNmsLocation(EntityArmorStand hololine){ |
|||
return new Location(hololine.getWorld().getWorld(), hololine.locX, hololine.locY, hololine.locZ); |
|||
} |
|||
|
|||
private void NmsSpawn(EntityArmorStand stand, String line, Location loc){ |
|||
stand.setLocation(loc.getX(), loc.getY(), loc.getZ(), 0, 0); |
|||
stand.setCustomName(line); |
|||
stand.setCustomNameVisible(true); |
|||
stand.setGravity(false); |
|||
stand.setSmall(true); |
|||
stand.setInvisible(true); |
|||
stand.setBasePlate(false); |
|||
stand.setArms(false); |
|||
if(!line.equals("")){ |
|||
PacketPlayOutSpawnEntityLiving packet = new PacketPlayOutSpawnEntityLiving(stand); |
|||
((CraftPlayer) this.player).getHandle().playerConnection.sendPacket(packet); |
|||
} |
|||
} |
|||
|
|||
private void spawn(){ |
|||
int ind = 0; |
|||
for(String line : lines){ |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(this.player!=null){ |
|||
if(ind>0) finalLoc = getNmsLocation(NmsArmorLines.get(ind-1)); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
WorldServer s = ((CraftWorld)this.location.getWorld()).getHandle(); |
|||
EntityArmorStand stand = new EntityArmorStand(s); |
|||
NmsSpawn(stand, line, finalLoc); |
|||
NmsArmorLines.add(stand); |
|||
} |
|||
else{ |
|||
if(ind>0) finalLoc = armor_lines.get(ind-1).getLocation(); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
ArmorStand Armorline = (ArmorStand) location.getWorld().spawnEntity(finalLoc, EntityType.ARMOR_STAND); |
|||
Armorline.setBasePlate(false); |
|||
Armorline.setCustomNameVisible(true); |
|||
Armorline.setGravity(false); |
|||
Armorline.setCanPickupItems(false); |
|||
Armorline.setCustomName(line); |
|||
Armorline.setSmall(true); |
|||
Armorline.setVisible(false); |
|||
armor_lines.add(Armorline); |
|||
if(line.equals("")) Armorline.remove(); |
|||
} |
|||
ind++; |
|||
} |
|||
} |
|||
|
|||
private void despawn(){ |
|||
if(this.player!=null){ |
|||
for(EntityArmorStand nmsStand : NmsArmorLines){ |
|||
NmsDestroy(nmsStand); |
|||
} |
|||
NmsArmorLines.clear(); |
|||
} |
|||
else{ |
|||
for(ArmorStand line : armor_lines){ |
|||
line.remove(); |
|||
} |
|||
armor_lines.clear(); |
|||
} |
|||
} |
|||
|
|||
public void setDistanceBetweenLines(Double distance){ |
|||
this.linesdistance = distance; |
|||
} |
|||
|
|||
public void display(){ |
|||
spawn(); |
|||
} |
|||
|
|||
public void update(ArrayList<String> lines){ |
|||
if(this.player != null){ |
|||
int ind = 0; |
|||
for(String newline : lines){ |
|||
if(this.lines.size()>= ind){ |
|||
String oldline = this.lines.get(ind); |
|||
if(!newline.equals(oldline)){ |
|||
if(!newline.equals("")){ |
|||
final EntityArmorStand oldstand = NmsArmorLines.get(ind); |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(ind>0) finalLoc = getNmsLocation(NmsArmorLines.get(ind-1)); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
WorldServer s = ((CraftWorld)this.location.getWorld()).getHandle(); |
|||
EntityArmorStand stand = new EntityArmorStand(s); |
|||
NmsSpawn(stand, newline, finalLoc); |
|||
this.NmsArmorLines.set(ind, stand); |
|||
this.lines.set(ind, newline); |
|||
NmsDestroy(oldstand); |
|||
} |
|||
else{ |
|||
this.lines.set(ind, newline); |
|||
final EntityArmorStand oldstand = NmsArmorLines.get(ind); |
|||
NmsDestroy(oldstand); |
|||
} |
|||
} |
|||
ind++; |
|||
} |
|||
else{ |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(ind>0) finalLoc = getNmsLocation(NmsArmorLines.get(ind-1)); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
WorldServer s = ((CraftWorld)this.location.getWorld()).getHandle(); |
|||
EntityArmorStand stand = new EntityArmorStand(s); |
|||
NmsSpawn(stand, newline, finalLoc); |
|||
this.NmsArmorLines.add(stand); |
|||
this.lines.add(newline); |
|||
} |
|||
} |
|||
if(lines.size() > this.lines.size()){ |
|||
int dif = lines.size() - this.lines.size(); |
|||
for(int in = 0; in <=dif; in++){ |
|||
int arrayind = (this.lines.size()-1)-in; |
|||
this.lines.remove(arrayind); |
|||
NmsDestroy(this.NmsArmorLines.get(arrayind)); |
|||
this.NmsArmorLines.remove(arrayind); |
|||
} |
|||
} |
|||
} |
|||
else{ |
|||
int ind = 0; |
|||
for(String newline : lines){ |
|||
if(this.lines.size()>= ind){ |
|||
String oldline = this.lines.get(ind); |
|||
if(!newline.equals(oldline)){ |
|||
if(newline != ""){ |
|||
this.armor_lines.get(ind).setCustomName(newline); |
|||
} |
|||
else{ |
|||
this.lines.set(ind, newline); |
|||
final ArmorStand oldstand = armor_lines.get(ind); |
|||
oldstand.remove(); |
|||
} |
|||
} |
|||
ind++; |
|||
} |
|||
else{ |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(ind>0) finalLoc = armor_lines.get(ind-1).getLocation(); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
ArmorStand Armorline = (ArmorStand) location.getWorld().spawnEntity(finalLoc, EntityType.ARMOR_STAND); |
|||
Armorline.setBasePlate(false); |
|||
Armorline.setCustomNameVisible(true); |
|||
Armorline.setGravity(false); |
|||
Armorline.setCanPickupItems(false); |
|||
Armorline.setCustomName(newline); |
|||
Armorline.setSmall(true); |
|||
Armorline.setVisible(false); |
|||
armor_lines.add(Armorline); |
|||
this.lines.add(newline); |
|||
} |
|||
} |
|||
if(lines.size() > this.lines.size()){ |
|||
int dif = lines.size() - this.lines.size(); |
|||
for(int in = 0; in <=dif; in++){ |
|||
int arrayind = (this.lines.size()-1)-in; |
|||
this.lines.remove(arrayind); |
|||
this.armor_lines.get(arrayind).remove(); |
|||
this.armor_lines.remove(arrayind); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
public void updateLine(int index, String text){ |
|||
if(this.lines.size() >= index){ |
|||
int realindex = (this.lines.size()-1)-index; |
|||
String oldtext = this.lines.get(realindex); |
|||
if(!text.equals(oldtext)){ |
|||
if(this.player != null){ |
|||
if(text != ""){ |
|||
final EntityArmorStand oldstand = NmsArmorLines.get(realindex); |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(realindex>0) finalLoc = getNmsLocation(NmsArmorLines.get(realindex-1)); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
WorldServer s = ((CraftWorld)this.location.getWorld()).getHandle(); |
|||
EntityArmorStand stand = new EntityArmorStand(s); |
|||
NmsSpawn(stand, text, finalLoc); |
|||
this.NmsArmorLines.set(realindex, stand); |
|||
NmsDestroy(oldstand); |
|||
} |
|||
else{ |
|||
this.lines.set(realindex, text); |
|||
final EntityArmorStand oldstand = NmsArmorLines.get(realindex); |
|||
NmsDestroy(oldstand); |
|||
} |
|||
} |
|||
else{ |
|||
if(text != ""){ |
|||
this.armor_lines.get(realindex).setCustomName(text); |
|||
} |
|||
else{ |
|||
final ArmorStand oldstand = armor_lines.get(realindex); |
|||
oldstand.remove(); |
|||
} |
|||
} |
|||
this.lines.set(realindex, text); |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
public void removeLine(int index){ |
|||
if(this.lines.size() >= index){ |
|||
int realindex = (this.lines.size()-1)-index; |
|||
if(this.player != null){ |
|||
final EntityArmorStand stand = NmsArmorLines.get(realindex); |
|||
this.NmsArmorLines.remove(stand); |
|||
NmsDestroy(stand); |
|||
} |
|||
else{ |
|||
this.armor_lines.get(realindex).remove(); |
|||
} |
|||
this.lines.remove(realindex); |
|||
} |
|||
} |
|||
|
|||
public void delete(){ |
|||
despawn(); |
|||
this.player = null; |
|||
this.NmsArmorLines = new ArrayList<EntityArmorStand>(); |
|||
this.armor_lines = new ArrayList<ArmorStand>(); |
|||
this.lines = new ArrayList<String>(); |
|||
this.location = null; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,283 @@ |
|||
package cx.sfy.TheBridge.hologram; |
|||
|
|||
import java.util.ArrayList; |
|||
|
|||
import org.bukkit.Location; |
|||
import org.bukkit.craftbukkit.v1_9_R2.CraftWorld; |
|||
import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer; |
|||
import org.bukkit.entity.ArmorStand; |
|||
import org.bukkit.entity.EntityType; |
|||
import org.bukkit.entity.Player; |
|||
|
|||
import cx.sfy.TheBridge.hologram.TruenoHologram; |
|||
import net.minecraft.server.v1_9_R2.EntityArmorStand; |
|||
import net.minecraft.server.v1_9_R2.PacketPlayOutEntityDestroy; |
|||
import net.minecraft.server.v1_9_R2.PacketPlayOutSpawnEntityLiving; |
|||
import net.minecraft.server.v1_9_R2.WorldServer; |
|||
|
|||
public class TruenoHologram_v1_9_R2 implements TruenoHologram{ |
|||
|
|||
private Location location; |
|||
private ArrayList<String> lines; |
|||
private double linesdistance = 0.30; |
|||
|
|||
private ArrayList<ArmorStand> armor_lines = new ArrayList<ArmorStand>(); |
|||
private ArrayList<EntityArmorStand> NmsArmorLines = new ArrayList<EntityArmorStand>(); |
|||
|
|||
private Player player = null; |
|||
|
|||
@Override |
|||
public void setupWorldHologram(Location loc, ArrayList<String> lines) { |
|||
this.location = loc.clone(); |
|||
this.lines = lines; |
|||
|
|||
} |
|||
|
|||
@Override |
|||
public void setupPlayerHologram(Player player, Location loc, ArrayList<String> lines) { |
|||
this.player = player; |
|||
this.location = loc.clone(); |
|||
this.lines = lines; |
|||
|
|||
} |
|||
|
|||
public Location getLocation(){ |
|||
return this.location; |
|||
} |
|||
|
|||
public Player getPlayer(){ |
|||
return player; |
|||
} |
|||
|
|||
private void NmsDestroy(EntityArmorStand hololine){ |
|||
PacketPlayOutEntityDestroy packet = new PacketPlayOutEntityDestroy(hololine.getId()); |
|||
((CraftPlayer) this.player).getHandle().playerConnection.sendPacket(packet); |
|||
} |
|||
|
|||
private Location getNmsLocation(EntityArmorStand hololine){ |
|||
return new Location(hololine.getWorld().getWorld(), hololine.locX, hololine.locY, hololine.locZ); |
|||
} |
|||
|
|||
private void NmsSpawn(EntityArmorStand stand, String line, Location loc){ |
|||
stand.setLocation(loc.getX(), loc.getY(), loc.getZ(), 0, 0); |
|||
stand.setCustomName(line); |
|||
stand.setCustomNameVisible(true); |
|||
stand.setGravity(false); |
|||
stand.setSmall(true); |
|||
stand.setInvisible(true); |
|||
stand.setBasePlate(false); |
|||
stand.setArms(false); |
|||
if(!line.equals("")){ |
|||
PacketPlayOutSpawnEntityLiving packet = new PacketPlayOutSpawnEntityLiving(stand); |
|||
((CraftPlayer) this.player).getHandle().playerConnection.sendPacket(packet); |
|||
} |
|||
} |
|||
|
|||
private void spawn(){ |
|||
int ind = 0; |
|||
for(String line : lines){ |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(this.player!=null){ |
|||
if(ind>0) finalLoc = getNmsLocation(NmsArmorLines.get(ind-1)); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
WorldServer s = ((CraftWorld)this.location.getWorld()).getHandle(); |
|||
EntityArmorStand stand = new EntityArmorStand(s); |
|||
NmsSpawn(stand, line, finalLoc); |
|||
NmsArmorLines.add(stand); |
|||
} |
|||
else{ |
|||
if(ind>0) finalLoc = armor_lines.get(ind-1).getLocation(); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
ArmorStand Armorline = (ArmorStand) location.getWorld().spawnEntity(finalLoc, EntityType.ARMOR_STAND); |
|||
Armorline.setBasePlate(false); |
|||
Armorline.setCustomNameVisible(true); |
|||
Armorline.setGravity(false); |
|||
Armorline.setCanPickupItems(false); |
|||
Armorline.setCustomName(line); |
|||
Armorline.setSmall(true); |
|||
Armorline.setVisible(false); |
|||
armor_lines.add(Armorline); |
|||
if(line.equals("")) Armorline.remove(); |
|||
} |
|||
ind++; |
|||
} |
|||
} |
|||
|
|||
private void despawn(){ |
|||
if(this.player!=null){ |
|||
for(EntityArmorStand nmsStand : NmsArmorLines){ |
|||
NmsDestroy(nmsStand); |
|||
} |
|||
NmsArmorLines.clear(); |
|||
} |
|||
else{ |
|||
for(ArmorStand line : armor_lines){ |
|||
line.remove(); |
|||
} |
|||
armor_lines.clear(); |
|||
} |
|||
} |
|||
|
|||
public void setDistanceBetweenLines(Double distance){ |
|||
this.linesdistance = distance; |
|||
} |
|||
|
|||
public void display(){ |
|||
spawn(); |
|||
} |
|||
|
|||
public void update(ArrayList<String> lines){ |
|||
if(this.player != null){ |
|||
int ind = 0; |
|||
for(String newline : lines){ |
|||
if(this.lines.size()>= ind){ |
|||
String oldline = this.lines.get(ind); |
|||
if(!newline.equals(oldline)){ |
|||
if(!newline.equals("")){ |
|||
final EntityArmorStand oldstand = NmsArmorLines.get(ind); |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(ind>0) finalLoc = getNmsLocation(NmsArmorLines.get(ind-1)); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
WorldServer s = ((CraftWorld)this.location.getWorld()).getHandle(); |
|||
EntityArmorStand stand = new EntityArmorStand(s); |
|||
NmsSpawn(stand, newline, finalLoc); |
|||
this.NmsArmorLines.set(ind, stand); |
|||
this.lines.set(ind, newline); |
|||
NmsDestroy(oldstand); |
|||
} |
|||
else{ |
|||
this.lines.set(ind, newline); |
|||
final EntityArmorStand oldstand = NmsArmorLines.get(ind); |
|||
NmsDestroy(oldstand); |
|||
} |
|||
} |
|||
ind++; |
|||
} |
|||
else{ |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(ind>0) finalLoc = getNmsLocation(NmsArmorLines.get(ind-1)); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
WorldServer s = ((CraftWorld)this.location.getWorld()).getHandle(); |
|||
EntityArmorStand stand = new EntityArmorStand(s); |
|||
NmsSpawn(stand, newline, finalLoc); |
|||
this.NmsArmorLines.add(stand); |
|||
this.lines.add(newline); |
|||
} |
|||
} |
|||
if(lines.size() > this.lines.size()){ |
|||
int dif = lines.size() - this.lines.size(); |
|||
for(int in = 0; in <=dif; in++){ |
|||
int arrayind = (this.lines.size()-1)-in; |
|||
this.lines.remove(arrayind); |
|||
NmsDestroy(this.NmsArmorLines.get(arrayind)); |
|||
this.NmsArmorLines.remove(arrayind); |
|||
} |
|||
} |
|||
} |
|||
else{ |
|||
int ind = 0; |
|||
for(String newline : lines){ |
|||
if(this.lines.size()>= ind){ |
|||
String oldline = this.lines.get(ind); |
|||
if(!newline.equals(oldline)){ |
|||
if(newline != ""){ |
|||
this.armor_lines.get(ind).setCustomName(newline); |
|||
} |
|||
else{ |
|||
this.lines.set(ind, newline); |
|||
final ArmorStand oldstand = armor_lines.get(ind); |
|||
oldstand.remove(); |
|||
} |
|||
} |
|||
ind++; |
|||
} |
|||
else{ |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(ind>0) finalLoc = armor_lines.get(ind-1).getLocation(); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
ArmorStand Armorline = (ArmorStand) location.getWorld().spawnEntity(finalLoc, EntityType.ARMOR_STAND); |
|||
Armorline.setBasePlate(false); |
|||
Armorline.setCustomNameVisible(true); |
|||
Armorline.setGravity(false); |
|||
Armorline.setCanPickupItems(false); |
|||
Armorline.setCustomName(newline); |
|||
Armorline.setSmall(true); |
|||
Armorline.setVisible(false); |
|||
armor_lines.add(Armorline); |
|||
this.lines.add(newline); |
|||
} |
|||
} |
|||
if(lines.size() > this.lines.size()){ |
|||
int dif = lines.size() - this.lines.size(); |
|||
for(int in = 0; in <=dif; in++){ |
|||
int arrayind = (this.lines.size()-1)-in; |
|||
this.lines.remove(arrayind); |
|||
this.armor_lines.get(arrayind).remove(); |
|||
this.armor_lines.remove(arrayind); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
public void updateLine(int index, String text){ |
|||
if(this.lines.size() >= index){ |
|||
int realindex = (this.lines.size()-1)-index; |
|||
String oldtext = this.lines.get(realindex); |
|||
if(!text.equals(oldtext)){ |
|||
if(this.player != null){ |
|||
if(text != ""){ |
|||
final EntityArmorStand oldstand = NmsArmorLines.get(realindex); |
|||
Location finalLoc = location.clone(); |
|||
finalLoc.setY(location.getY()+(linesdistance*lines.size())); |
|||
if(realindex>0) finalLoc = getNmsLocation(NmsArmorLines.get(realindex-1)); finalLoc.setY(finalLoc.getY()-linesdistance); |
|||
WorldServer s = ((CraftWorld)this.location.getWorld()).getHandle(); |
|||
EntityArmorStand stand = new EntityArmorStand(s); |
|||
NmsSpawn(stand, text, finalLoc); |
|||
this.NmsArmorLines.set(realindex, stand); |
|||
NmsDestroy(oldstand); |
|||
} |
|||
else{ |
|||
this.lines.set(realindex, text); |
|||
final EntityArmorStand oldstand = NmsArmorLines.get(realindex); |
|||
NmsDestroy(oldstand); |
|||
} |
|||
} |
|||
else{ |
|||
if(text != ""){ |
|||
this.armor_lines.get(realindex).setCustomName(text); |
|||
} |
|||
else{ |
|||
final ArmorStand oldstand = armor_lines.get(realindex); |
|||
oldstand.remove(); |
|||
} |
|||
} |
|||
this.lines.set(realindex, text); |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
public void removeLine(int index){ |
|||
if(this.lines.size() >= index){ |
|||
int realindex = (this.lines.size()-1)-index; |
|||
if(this.player != null){ |
|||
final EntityArmorStand stand = NmsArmorLines.get(realindex); |
|||
this.NmsArmorLines.remove(stand); |
|||
NmsDestroy(stand); |
|||
} |
|||
else{ |
|||
this.armor_lines.get(realindex).remove(); |
|||
} |
|||
this.lines.remove(realindex); |
|||
} |
|||
} |
|||
|
|||
public void delete(){ |
|||
despawn(); |
|||
this.player = null; |
|||
this.NmsArmorLines = new ArrayList<EntityArmorStand>(); |
|||
this.armor_lines = new ArrayList<ArmorStand>(); |
|||
this.lines = new ArrayList<String>(); |
|||
this.location = null; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,85 @@ |
|||
package cx.sfy.TheBridge.hooks; |
|||
|
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.plugin.Plugin; |
|||
|
|||
import cx.sfy.TheBridge.database.PlayerStat; |
|||
import me.clip.placeholderapi.expansion.PlaceholderExpansion; |
|||
|
|||
public class PlaceholderHook extends PlaceholderExpansion { |
|||
|
|||
private Plugin p; |
|||
|
|||
public PlaceholderHook(Plugin p) { |
|||
this.p = p; |
|||
} |
|||
|
|||
@Override |
|||
public String getAuthor() { |
|||
return "Stefatorus"; |
|||
} |
|||
|
|||
@Override |
|||
public String getIdentifier() { |
|||
return "bridges"; |
|||
} |
|||
|
|||
@Override |
|||
public String getPlugin() { |
|||
return p.getDescription().getName(); |
|||
} |
|||
|
|||
@Override |
|||
public String getVersion() { |
|||
return p.getDescription().getVersion(); |
|||
} |
|||
|
|||
@Override |
|||
public String onPlaceholderRequest(Player p, String id) { |
|||
if (p == null || !p.isOnline()){ |
|||
return null; |
|||
} |
|||
PlayerStat ps = PlayerStat.getPlayerStat(p); |
|||
if (id.equals("normal_kills")) { |
|||
return String.valueOf(ps.getNormalKills()); |
|||
} |
|||
if (id.equals("normal_wins")) { |
|||
return String.valueOf(ps.getNormalWins()); |
|||
} |
|||
if (id.equals("normal_goals")) { |
|||
return String.valueOf(ps.getNormalGoals()); |
|||
} |
|||
if (id.equals("four_kills")) { |
|||
return String.valueOf(ps.getFourKills()); |
|||
} |
|||
if (id.equals("four_wins")) { |
|||
return String.valueOf(ps.getFourWins()); |
|||
} |
|||
if (id.equals("four_goals")) { |
|||
return String.valueOf(ps.getFourGoals()); |
|||
} |
|||
if (id.equals("global_kills")) { |
|||
return String.valueOf(ps.getFourKills() + ps.getNormalKills()); |
|||
} |
|||
if (id.equals("global_wins")) { |
|||
return String.valueOf(ps.getFourWins() + ps.getNormalWins()); |
|||
} |
|||
if (id.equals("global_goals")) { |
|||
return String.valueOf(ps.getFourGoals() + ps.getNormalGoals()); |
|||
} |
|||
if (id.equals("coins")) { |
|||
return String.valueOf(ps.getCoins()); |
|||
} |
|||
if (id.equals("xp")) { |
|||
return String.valueOf(ps.getXP()); |
|||
} |
|||
if (id.equals("blocks_placed")) { |
|||
return String.valueOf(ps.getPlaced()); |
|||
} |
|||
if (id.equals("blocks_broken")) { |
|||
return String.valueOf(ps.getBroken()); |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,87 @@ |
|||
package cx.sfy.TheBridge.kit; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.Material; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.inventory.Inventory; |
|||
import org.bukkit.inventory.ItemStack; |
|||
import org.bukkit.inventory.meta.ItemMeta; |
|||
import org.bukkit.scheduler.BukkitRunnable; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.database.PlayerStat; |
|||
import cx.sfy.TheBridge.game.InventoryData; |
|||
import cx.sfy.TheBridge.utils.ItemBuilder; |
|||
|
|||
public class Hotbar { |
|||
|
|||
Main plugin; |
|||
|
|||
public Hotbar(Main plugin) { |
|||
this.plugin = plugin; |
|||
} |
|||
|
|||
public void createHotbarMenu(Player p) { |
|||
Inventory inv = Bukkit.getServer().createInventory(null, 54, plugin.getLang().get("menus.hotbar.title")); |
|||
ItemStack [] items = plugin.getGM().getKit().getContents(); |
|||
ItemStack glass = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short)7); |
|||
ItemMeta glassM = glass.getItemMeta(); |
|||
glassM.setDisplayName("§a↑ §eInventory"); |
|||
List<String> lore = new ArrayList<String>(); |
|||
lore.add("§a↓ §eHotbar"); |
|||
glassM.setLore(lore); |
|||
glass.setItemMeta(glassM); |
|||
ItemStack save = ItemBuilder.item(Material.CHEST, 1, (short)0, plugin.getLang().get("menus.save.nameItem"), plugin.getLang().get("menus.save.loreItem")); |
|||
ItemStack close = ItemBuilder.item(Material.BARRIER, 1, (short)0, plugin.getLang().get("menus.close.nameItem"), plugin.getLang().get("menus.close.loreItem")); |
|||
for (int i = 0; i < 9; i++) { |
|||
if (items[i] != null) { |
|||
inv.setItem(i + 36, items[i]); |
|||
} |
|||
} |
|||
for (int i = 27; i < 36; i++) { |
|||
inv.setItem(i, glass); |
|||
} |
|||
inv.setItem(49, save); |
|||
inv.setItem(50, close); |
|||
new InventoryData(p); |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
if (!p.getOpenInventory().getTitle().equals(plugin.getLang().get("menus.hotbar.title"))) { |
|||
InventoryData itd = InventoryData.getInventoryData(p); |
|||
if (itd == null) { |
|||
return; |
|||
} |
|||
InventoryData.remove(p); |
|||
cancel(); |
|||
} |
|||
} |
|||
}.runTaskTimer(plugin, 0, 0); |
|||
p.openInventory(inv); |
|||
} |
|||
|
|||
public void saveLayout(Player p, Inventory inv) { |
|||
Inventory pinv = Bukkit.getServer().createInventory(null, 36); |
|||
for (int i = 0; i < 27; i++) { |
|||
if (inv.getItem(i) == null || inv.getItem(i).getType() == Material.AIR) { |
|||
pinv.setItem(i + 9, new ItemStack(Material.BARRIER)); |
|||
} else { |
|||
pinv.setItem(i + 9, inv.getItem(i)); |
|||
} |
|||
} |
|||
for (int i = 36; i < 45; i++) { |
|||
if (inv.getItem(i) == null || inv.getItem(i).getType() == Material.AIR) { |
|||
pinv.setItem(i - 36, new ItemStack(Material.BARRIER)); |
|||
} else { |
|||
pinv.setItem(i - 36, inv.getItem(i)); |
|||
} |
|||
} |
|||
PlayerStat ps = PlayerStat.getPlayerStat(p); |
|||
ps.setHotbar(pinv.getContents()); |
|||
p.sendMessage(plugin.getLang().get("messages.hotbarSaved")); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,82 @@ |
|||
package cx.sfy.TheBridge.kit; |
|||
|
|||
import java.io.ByteArrayInputStream; |
|||
import java.io.ByteArrayOutputStream; |
|||
import java.io.IOException; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.inventory.Inventory; |
|||
import org.bukkit.inventory.ItemStack; |
|||
import org.bukkit.inventory.PlayerInventory; |
|||
import org.bukkit.util.io.BukkitObjectInputStream; |
|||
import org.bukkit.util.io.BukkitObjectOutputStream; |
|||
import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder; |
|||
|
|||
public class Kit { |
|||
|
|||
public String playerInventoryToBase64(PlayerInventory playerInventory) throws IllegalStateException { |
|||
String content = toBase64(playerInventory); |
|||
return content; |
|||
} |
|||
|
|||
public String itemStackArrayToBase64(ItemStack[] items) throws IllegalStateException { |
|||
try { |
|||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); |
|||
BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream); |
|||
dataOutput.writeInt(items.length); |
|||
for (int i = 0; i < items.length; i++) { |
|||
dataOutput.writeObject(items[i]); |
|||
} |
|||
dataOutput.close(); |
|||
return Base64Coder.encodeLines(outputStream.toByteArray()); |
|||
} catch (Exception e) { |
|||
throw new IllegalStateException("Unable to save item stacks.", e); |
|||
} |
|||
} |
|||
|
|||
public String toBase64(Inventory inventory) throws IllegalStateException { |
|||
try { |
|||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); |
|||
BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream); |
|||
dataOutput.writeInt(inventory.getSize()); |
|||
for (int i = 0; i < inventory.getSize(); i++) { |
|||
dataOutput.writeObject(inventory.getItem(i)); |
|||
} |
|||
dataOutput.close(); |
|||
return Base64Coder.encodeLines(outputStream.toByteArray()); |
|||
} catch (Exception e) { |
|||
throw new IllegalStateException("Unable to save item stacks.", e); |
|||
} |
|||
} |
|||
|
|||
public Inventory fromBase64(String data) throws IOException { |
|||
try { |
|||
ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64Coder.decodeLines(data)); |
|||
BukkitObjectInputStream dataInput = new BukkitObjectInputStream(inputStream); |
|||
Inventory inventory = Bukkit.getServer().createInventory(null, dataInput.readInt()); |
|||
for (int i = 0; i < inventory.getSize(); i++) { |
|||
inventory.setItem(i, (ItemStack) dataInput.readObject()); |
|||
} |
|||
dataInput.close(); |
|||
return inventory; |
|||
} catch (ClassNotFoundException e) { |
|||
throw new IOException("Unable to decode class type.", e); |
|||
} |
|||
} |
|||
|
|||
public ItemStack[] itemStackArrayFromBase64(String data) throws IOException { |
|||
try { |
|||
ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64Coder.decodeLines(data)); |
|||
BukkitObjectInputStream dataInput = new BukkitObjectInputStream(inputStream); |
|||
ItemStack[] items = new ItemStack[dataInput.readInt()]; |
|||
for (int i = 0; i < items.length; i++) { |
|||
items[i] = (ItemStack) dataInput.readObject(); |
|||
} |
|||
dataInput.close(); |
|||
return items; |
|||
} catch (ClassNotFoundException e) { |
|||
throw new IOException("Unable to decode class type.", e); |
|||
} |
|||
} |
|||
|
|||
} |
@ -0,0 +1,22 @@ |
|||
package cx.sfy.TheBridge.leaderheads; |
|||
|
|||
import java.util.Arrays; |
|||
|
|||
import org.bukkit.entity.Player; |
|||
|
|||
import cx.sfy.TheBridge.database.PlayerStat; |
|||
import me.robin.leaderheads.datacollectors.OnlineDataCollector; |
|||
import me.robin.leaderheads.objects.BoardType; |
|||
|
|||
public class TheBridgeFourGoals extends OnlineDataCollector { |
|||
|
|||
public TheBridgeFourGoals() { |
|||
super("bridges-f-goals", "TheBridge", BoardType.DEFAULT, "&bBridges Four - Kills", "bridgesfgoals", Arrays.asList("&c----------", "&a{name}", "&e{amount} goals", "&c----------")); |
|||
} |
|||
|
|||
@Override |
|||
public Double getScore(Player p) { |
|||
return (double)PlayerStat.getPlayerStat(p).getFourGoals(); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,22 @@ |
|||
package cx.sfy.TheBridge.leaderheads; |
|||
|
|||
import java.util.Arrays; |
|||
|
|||
import org.bukkit.entity.Player; |
|||
|
|||
import cx.sfy.TheBridge.database.PlayerStat; |
|||
import me.robin.leaderheads.datacollectors.OnlineDataCollector; |
|||
import me.robin.leaderheads.objects.BoardType; |
|||
|
|||
public class TheBridgeFourKills extends OnlineDataCollector { |
|||
|
|||
public TheBridgeFourKills() { |
|||
super("bridges-f-kills", "TheBridge", BoardType.DEFAULT, "&bBridges Four - Kills", "bridgesfkills", Arrays.asList("&c----------", "&a{name}", "&e{amount} kills", "&c----------")); |
|||
} |
|||
|
|||
@Override |
|||
public Double getScore(Player p) { |
|||
return (double)PlayerStat.getPlayerStat(p).getFourKills(); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,22 @@ |
|||
package cx.sfy.TheBridge.leaderheads; |
|||
|
|||
import java.util.Arrays; |
|||
|
|||
import org.bukkit.entity.Player; |
|||
|
|||
import cx.sfy.TheBridge.database.PlayerStat; |
|||
import me.robin.leaderheads.datacollectors.OnlineDataCollector; |
|||
import me.robin.leaderheads.objects.BoardType; |
|||
|
|||
public class TheBridgeFourWins extends OnlineDataCollector { |
|||
|
|||
public TheBridgeFourWins() { |
|||
super("bridges-f-wins", "TheBridge", BoardType.DEFAULT, "&bBridges Four - Wins", "bridgesfwins", Arrays.asList("&c----------", "&a{name}", "&e{amount} wins", "&c----------")); |
|||
} |
|||
|
|||
@Override |
|||
public Double getScore(Player p) { |
|||
return (double)PlayerStat.getPlayerStat(p).getFourWins(); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,22 @@ |
|||
package cx.sfy.TheBridge.leaderheads; |
|||
|
|||
import java.util.Arrays; |
|||
|
|||
import org.bukkit.entity.Player; |
|||
|
|||
import cx.sfy.TheBridge.database.PlayerStat; |
|||
import me.robin.leaderheads.datacollectors.OnlineDataCollector; |
|||
import me.robin.leaderheads.objects.BoardType; |
|||
|
|||
public class TheBridgeNormalGoals extends OnlineDataCollector { |
|||
|
|||
public TheBridgeNormalGoals() { |
|||
super("bridges-n-goals", "TheBridge", BoardType.DEFAULT, "&bBridges Normal - Goals", "bridgesngoals", Arrays.asList("&c----------", "&a{name}", "&e{amount} goals", "&c----------")); |
|||
} |
|||
|
|||
@Override |
|||
public Double getScore(Player p) { |
|||
return (double)PlayerStat.getPlayerStat(p).getNormalKills(); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,22 @@ |
|||
package cx.sfy.TheBridge.leaderheads; |
|||
|
|||
import java.util.Arrays; |
|||
|
|||
import org.bukkit.entity.Player; |
|||
|
|||
import cx.sfy.TheBridge.database.PlayerStat; |
|||
import me.robin.leaderheads.datacollectors.OnlineDataCollector; |
|||
import me.robin.leaderheads.objects.BoardType; |
|||
|
|||
public class TheBridgeNormalKills extends OnlineDataCollector { |
|||
|
|||
public TheBridgeNormalKills() { |
|||
super("bridges-n-kills", "TheBridge", BoardType.DEFAULT, "&bBridges Normal - Kills", "bridgesnkills", Arrays.asList("&c----------", "&a{name}", "&e{amount} kills", "&c----------")); |
|||
} |
|||
|
|||
@Override |
|||
public Double getScore(Player p) { |
|||
return (double)PlayerStat.getPlayerStat(p).getNormalKills(); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,22 @@ |
|||
package cx.sfy.TheBridge.leaderheads; |
|||
|
|||
import java.util.Arrays; |
|||
|
|||
import org.bukkit.entity.Player; |
|||
|
|||
import cx.sfy.TheBridge.database.PlayerStat; |
|||
import me.robin.leaderheads.datacollectors.OnlineDataCollector; |
|||
import me.robin.leaderheads.objects.BoardType; |
|||
|
|||
public class TheBridgeNormalWins extends OnlineDataCollector { |
|||
|
|||
public TheBridgeNormalWins() { |
|||
super("bridges-n-wins", "TheBridge", BoardType.DEFAULT, "&bBridges Normal - Wins", "bridgesnwins", Arrays.asList("&c----------", "&a{name}", "&e{amount} wins", "&c----------")); |
|||
} |
|||
|
|||
@Override |
|||
public Double getScore(Player p) { |
|||
return (double)PlayerStat.getPlayerStat(p).getNormalWins(); |
|||
} |
|||
|
|||
} |
File diff suppressed because it is too large
@ -0,0 +1,159 @@ |
|||
package cx.sfy.TheBridge.listeners; |
|||
|
|||
import org.bukkit.Location; |
|||
import org.bukkit.Material; |
|||
import org.bukkit.block.Sign; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.event.EventHandler; |
|||
import org.bukkit.event.Listener; |
|||
import org.bukkit.event.block.Action; |
|||
import org.bukkit.event.block.BlockBreakEvent; |
|||
import org.bukkit.event.block.SignChangeEvent; |
|||
import org.bukkit.event.player.PlayerInteractEvent; |
|||
import org.bukkit.inventory.ItemStack; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.game.Game; |
|||
import cx.sfy.TheBridge.game.GameFour; |
|||
import cx.sfy.TheBridge.game.Game.State; |
|||
import cx.sfy.TheBridge.game.GameFour.FState;; |
|||
|
|||
public class SetupListener implements Listener { |
|||
|
|||
Main plugin; |
|||
|
|||
public SetupListener(Main plugin) { |
|||
this.plugin = plugin; |
|||
} |
|||
|
|||
@SuppressWarnings("deprecation") |
|||
@EventHandler |
|||
public void onInteract(PlayerInteractEvent e) { |
|||
Player p = e.getPlayer(); |
|||
if (p.getItemInHand() == null || p.getItemInHand().getType() == Material.AIR) { |
|||
return; |
|||
} |
|||
ItemStack item = p.getItemInHand(); |
|||
if (item.getType() == Material.BLAZE_ROD && item.getItemMeta().getDisplayName().equalsIgnoreCase("§eSetup TheBridge")) { |
|||
if (e.getAction().equals(Action.LEFT_CLICK_BLOCK)) { |
|||
plugin.getSM().setMax(p, e.getClickedBlock().getLocation()); |
|||
e.setCancelled(true); |
|||
} |
|||
if (e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) { |
|||
plugin.getSM().setMin(p, e.getClickedBlock().getLocation()); |
|||
e.setCancelled(true); |
|||
} |
|||
} |
|||
} |
|||
|
|||
@EventHandler |
|||
public void onSignChange(SignChangeEvent e) { |
|||
Player p = e.getPlayer(); |
|||
if (!p.hasPermission("bridges.admin")) { |
|||
return; |
|||
} |
|||
if (e.getLine(0).equals("[bridges]")) { |
|||
if (e.getLine(1).toLowerCase().equals("normal")) { |
|||
String game = e.getLine(2); |
|||
Sign sign = (Sign)e.getBlock().getState(); |
|||
if (plugin.getGM().getGameByName(game) == null) { |
|||
p.sendMessage("§cThis Game not exits."); |
|||
return; |
|||
} |
|||
Game gname = plugin.getGM().getGameByName(game); |
|||
plugin.getSIM().createSign(e.getBlock().getLocation(), game, sign); |
|||
e.setLine(0, plugin.getLang().get("signs.normal.line-1").replaceAll("<state>", getState(gname.getState())).replaceAll("<name>", game).replaceAll("<players>", String.valueOf(gname.getPlayers())).replaceAll("<max>", String.valueOf(gname.getMax()))); |
|||
e.setLine(1, plugin.getLang().get("signs.normal.line-2").replaceAll("<state>", getState(gname.getState())).replaceAll("<name>", game).replaceAll("<players>", String.valueOf(gname.getPlayers())).replaceAll("<max>", String.valueOf(gname.getMax()))); |
|||
e.setLine(2, plugin.getLang().get("signs.normal.line-3").replaceAll("<state>", getState(gname.getState())).replaceAll("<name>", game).replaceAll("<players>", String.valueOf(gname.getPlayers())).replaceAll("<max>", String.valueOf(gname.getMax()))); |
|||
e.setLine(3, plugin.getLang().get("signs.normal.line-4").replaceAll("<state>", getState(gname.getState())).replaceAll("<name>", game).replaceAll("<players>", String.valueOf(gname.getPlayers())).replaceAll("<max>", String.valueOf(gname.getMax()))); |
|||
p.sendMessage("§aSign Normal added."); |
|||
} else if (e.getLine(1).toLowerCase().equals("four")) { |
|||
String game = e.getLine(2); |
|||
Sign sign = (Sign)e.getBlock().getState(); |
|||
if (plugin.getGM().getGameFourByName(game) == null) { |
|||
p.sendMessage("§cThis Game not exits."); |
|||
return; |
|||
} |
|||
GameFour gname = plugin.getGM().getGameFourByName(game); |
|||
plugin.getSIM().createFourSign(e.getBlock().getLocation(), game, sign); |
|||
e.setLine(0, plugin.getLang().get("signs.four.line-1").replaceAll("<state>", getState(gname.getState())).replaceAll("<name>", game).replaceAll("<players>", String.valueOf(gname.getPlayers().size())).replaceAll("<max>", String.valueOf(gname.getMax()))); |
|||
e.setLine(1, plugin.getLang().get("signs.four.line-2").replaceAll("<state>", getState(gname.getState())).replaceAll("<name>", game).replaceAll("<players>", String.valueOf(gname.getPlayers().size())).replaceAll("<max>", String.valueOf(gname.getMax()))); |
|||
e.setLine(2, plugin.getLang().get("signs.four.line-3").replaceAll("<state>", getState(gname.getState())).replaceAll("<name>", game).replaceAll("<players>", String.valueOf(gname.getPlayers().size())).replaceAll("<max>", String.valueOf(gname.getMax()))); |
|||
e.setLine(3, plugin.getLang().get("signs.four.line-4").replaceAll("<state>", getState(gname.getState())).replaceAll("<name>", game).replaceAll("<players>", String.valueOf(gname.getPlayers().size())).replaceAll("<max>", String.valueOf(gname.getMax()))); |
|||
p.sendMessage("§aSign Four added."); |
|||
} |
|||
} |
|||
} |
|||
|
|||
protected String getState(State state) { |
|||
if (state == State.WAITING) { |
|||
return plugin.getLang().get("states.waiting"); |
|||
} |
|||
if (state == State.STARTING) { |
|||
return plugin.getLang().get("states.starting"); |
|||
} |
|||
if (state == State.PREGAME) { |
|||
return plugin.getLang().get("states.pregame"); |
|||
} |
|||
if (state == State.INGAME) { |
|||
return plugin.getLang().get("states.ingame"); |
|||
} |
|||
if (state == State.FINISH) { |
|||
return plugin.getLang().get("states.finish"); |
|||
} |
|||
if (state == State.RESTARTING) { |
|||
return plugin.getLang().get("states.restarting"); |
|||
} |
|||
return ""; |
|||
} |
|||
|
|||
protected String getState(FState state) { |
|||
if (state == FState.WAITING) { |
|||
return plugin.getLang().get("states.waiting"); |
|||
} |
|||
if (state == FState.STARTING) { |
|||
return plugin.getLang().get("states.starting"); |
|||
} |
|||
if (state == FState.PREGAME) { |
|||
return plugin.getLang().get("states.pregame"); |
|||
} |
|||
if (state == FState.INGAME) { |
|||
return plugin.getLang().get("states.ingame"); |
|||
} |
|||
if (state == FState.FINISH) { |
|||
return plugin.getLang().get("states.finish"); |
|||
} |
|||
if (state == FState.RESTARTING) { |
|||
return plugin.getLang().get("states.restarting"); |
|||
} |
|||
return ""; |
|||
} |
|||
|
|||
@EventHandler |
|||
public void onBreak(BlockBreakEvent e) { |
|||
Player p = e.getPlayer(); |
|||
if (!p.hasPermission("bridges.admin")) { |
|||
return; |
|||
} |
|||
if (plugin.getSIM().getSigns().keySet().contains(e.getBlock().getLocation())) { |
|||
plugin.getSigns().set("signs.normal." + plugin.getSIM().getSigns().get(e.getBlock().getLocation()).getGame(), null); |
|||
plugin.getSigns().save(); |
|||
p.sendMessage("§cSign normal removed."); |
|||
} else if (plugin.getSIM().getFourSigns().keySet().contains(e.getBlock().getLocation())) { |
|||
plugin.getSigns().set("signs.four." + plugin.getSIM().getFourSigns().get(e.getBlock().getLocation()).getGame(), null); |
|||
plugin.getSigns().save(); |
|||
p.sendMessage("§cSign four removed."); |
|||
} |
|||
} |
|||
|
|||
public String getLocationString(Location loc){ |
|||
String world = loc.getWorld().getName(); |
|||
double x = loc.getX(); |
|||
double y = loc.getY(); |
|||
double z = loc.getZ(); |
|||
float yaw = loc.getYaw(); |
|||
float pitch = loc.getPitch(); |
|||
return world + ";" + x + ";" + y + ";" + z + ";" + yaw + ";" + pitch; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,393 @@ |
|||
package cx.sfy.TheBridge.listeners; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.HashMap; |
|||
import java.util.UUID; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.Location; |
|||
import org.bukkit.Material; |
|||
import org.bukkit.entity.Arrow; |
|||
import org.bukkit.entity.Egg; |
|||
import org.bukkit.entity.EnderPearl; |
|||
import org.bukkit.entity.Entity; |
|||
import org.bukkit.entity.ExperienceOrb; |
|||
import org.bukkit.entity.LivingEntity; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.entity.Projectile; |
|||
import org.bukkit.entity.Snowball; |
|||
import org.bukkit.entity.ThrownPotion; |
|||
import org.bukkit.event.EventHandler; |
|||
import org.bukkit.event.EventPriority; |
|||
import org.bukkit.event.Listener; |
|||
import org.bukkit.event.block.Action; |
|||
import org.bukkit.event.block.BlockCanBuildEvent; |
|||
import org.bukkit.event.block.BlockDamageEvent; |
|||
import org.bukkit.event.block.BlockPlaceEvent; |
|||
import org.bukkit.event.entity.EntityDamageByEntityEvent; |
|||
import org.bukkit.event.entity.EntityDamageEvent; |
|||
import org.bukkit.event.entity.EntityTargetEvent; |
|||
import org.bukkit.event.entity.FoodLevelChangeEvent; |
|||
import org.bukkit.event.entity.PotionSplashEvent; |
|||
import org.bukkit.event.inventory.InventoryClickEvent; |
|||
import org.bukkit.event.inventory.InventoryDragEvent; |
|||
import org.bukkit.event.player.PlayerDropItemEvent; |
|||
import org.bukkit.event.player.PlayerInteractEvent; |
|||
import org.bukkit.event.player.PlayerPickupItemEvent; |
|||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; |
|||
import org.bukkit.event.vehicle.VehicleEnterEvent; |
|||
import org.bukkit.inventory.Inventory; |
|||
import org.bukkit.inventory.ItemStack; |
|||
import org.bukkit.util.Vector; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.game.GameFour; |
|||
|
|||
public class SpectatorListener implements Listener { |
|||
|
|||
public Main plugin; |
|||
public SpectatorListener(Main plugin) { |
|||
this.plugin = plugin; |
|||
} |
|||
|
|||
@EventHandler |
|||
public void onBlockPlace(BlockPlaceEvent e) { |
|||
final GameFour game = plugin.getGM().getGameFourByPlayer(e.getPlayer()); |
|||
if (game == null) |
|||
return; |
|||
if (game.getSpects().contains(e.getPlayer())) |
|||
e.setCancelled(true); |
|||
} |
|||
|
|||
@EventHandler |
|||
public void onDrop(PlayerDropItemEvent e) { |
|||
final GameFour game = plugin.getGM().getGameFourByPlayer(e.getPlayer()); |
|||
if (game == null) |
|||
return; |
|||
if (game.getSpects().contains(e.getPlayer())) |
|||
e.setCancelled(true); |
|||
} |
|||
|
|||
@EventHandler |
|||
public void onChest(PlayerInteractEvent e) { |
|||
final GameFour game = plugin.getGM().getGameFourByPlayer(e.getPlayer()); |
|||
if (game == null) |
|||
return; |
|||
if (game.getSpects().contains(e.getPlayer())) |
|||
if (e.getAction().equals(Action.RIGHT_CLICK_BLOCK) && e.getClickedBlock().getType() == Material.CHEST || e.getAction().equals(Action.LEFT_CLICK_BLOCK) && e.getClickedBlock().getType() == Material.CHEST) |
|||
e.setCancelled(true); |
|||
} |
|||
|
|||
@EventHandler |
|||
public void onInventoryClick(InventoryClickEvent e) { |
|||
final GameFour game = plugin.getGM().getGameFourByPlayer((Player)e.getWhoClicked()); |
|||
if (game == null) |
|||
return; |
|||
if (game.getSpects().contains(e.getWhoClicked())) { |
|||
if (e.getClick().isShiftClick()) { |
|||
final Inventory clicked = e.getClickedInventory(); |
|||
if (clicked == e.getWhoClicked().getInventory()) { |
|||
final ItemStack clickedOn = e.getCurrentItem(); |
|||
if (clickedOn != null) |
|||
e.setCancelled(true); |
|||
} |
|||
} |
|||
final Inventory clicked = e.getClickedInventory(); |
|||
if (clicked != e.getWhoClicked().getInventory()) { |
|||
final ItemStack onCursor = e.getCursor(); |
|||
if (onCursor != null) |
|||
e.setCancelled(true); |
|||
} |
|||
} |
|||
} |
|||
|
|||
@EventHandler |
|||
public void onDrag(InventoryDragEvent e) { |
|||
final GameFour game = plugin.getGM().getGameFourByPlayer((Player)e.getWhoClicked()); |
|||
if (game == null) |
|||
return; |
|||
if (game.getSpects().contains(e.getWhoClicked())) |
|||
e.setCancelled(true); |
|||
} |
|||
|
|||
@EventHandler |
|||
protected void onBlockCanBuild(BlockCanBuildEvent e) { |
|||
if (!e.isBuildable()) { |
|||
final Location blockL = e.getBlock().getLocation(); |
|||
boolean allowed = false; |
|||
for (final Player target : Bukkit.getServer().getOnlinePlayers()) { |
|||
final GameFour game = plugin.getGM().getGameFourByPlayer(target); |
|||
if (game == null) |
|||
return; |
|||
if (target.getWorld().equals(e.getBlock().getWorld()) && game.getSpects().contains(target)) { |
|||
final Location playerL = target.getLocation(); |
|||
if (playerL.getX() > blockL.getBlockX()-1 && playerL.getX() < blockL.getBlockX()+1) |
|||
if (playerL.getZ() > blockL.getBlockZ()-1 && playerL.getZ() < blockL.getBlockZ()+1) |
|||
if (playerL.getY() > blockL.getBlockY()-2 && playerL.getY() < blockL.getBlockY()+1) |
|||
if (game.getSpects().contains(target)) { |
|||
allowed = true; |
|||
target.teleport(e.getBlock().getLocation().add(0, 5, 0), TeleportCause.PLUGIN); |
|||
} else { |
|||
allowed = false; |
|||
break; |
|||
} |
|||
|
|||
} |
|||
} |
|||
e.setBuildable(allowed); |
|||
} |
|||
} |
|||
|
|||
@EventHandler |
|||
public void onPlayer(BlockPlaceEvent e) { |
|||
final Location location = e.getBlock().getLocation(); |
|||
final GameFour game = plugin.getGM().getGameFourByPlayer(e.getPlayer()); |
|||
if (game == null) |
|||
return; |
|||
for (final Player on : Bukkit.getOnlinePlayers()) |
|||
if (game.getSpects().contains(on)) { |
|||
final Location location2 = on.getLocation(); |
|||
if (location2.getX() > location.getBlockX() - 1 && location2.getX() < location.getBlockX() + 1 && location2.getZ() > location.getBlockZ() - 1 && location2.getZ() < location.getBlockZ() + 1 && location2.getY() > location.getBlockY() - 2 && location2.getY() < location.getBlockY() + 1) |
|||
on.teleport(on.getLocation().add(5, 5, 5)); |
|||
} |
|||
} |
|||
|
|||
@EventHandler |
|||
protected void onEntityDamageEvent(EntityDamageByEntityEvent e) { |
|||
if (e.getDamager() instanceof Player && e.getEntity() instanceof Player) { |
|||
final GameFour game = plugin.getGM().getGameFourByPlayer((Player)e.getDamager()); |
|||
if (game == null) |
|||
return; |
|||
if ((!e.getDamager().hasMetadata("NPC") && game.getSpects().contains(e.getDamager())) || (!e.getEntity().hasMetadata("NPC") && game.getSpects().contains(e.getEntity()))) |
|||
e.setCancelled(true); |
|||
} else if (!(e.getEntity() instanceof Player) && e.getDamager() instanceof Player) { |
|||
final GameFour game = plugin.getGM().getGameFourByPlayer((Player)e.getDamager()); |
|||
if (game == null) |
|||
return; |
|||
if (!e.getDamager().hasMetadata("NPC") && game.getSpects().contains(e.getDamager())) |
|||
e.setCancelled(true); |
|||
} else if (e.getEntity() instanceof Player && !(e.getDamager() instanceof Player)) { |
|||
final GameFour game = plugin.getGM().getGameFourByPlayer((Player)e.getEntity()); |
|||
if (game == null) |
|||
return; |
|||
if (!e.getEntity().hasMetadata("NPC") && game.getSpects().contains(e.getEntity())) |
|||
e.setCancelled(true); |
|||
} |
|||
GameFour game = null; |
|||
if (e.getEntity() instanceof Player) |
|||
game = plugin.getGM().getGameFourByPlayer((Player)e.getEntity()); |
|||
if (game == null) |
|||
return; |
|||
if(e.getDamager() instanceof Projectile |
|||
&& !(e.getDamager() instanceof ThrownPotion) |
|||
&& !e.getEntity().hasMetadata("NPC") |
|||
&& game.getSpects().contains(e.getEntity())) { |
|||
|
|||
e.setCancelled(true); |
|||
e.getDamager().remove(); |
|||
final Player spectatorInvolved = (Player) e.getEntity(); |
|||
final boolean wasFlying = spectatorInvolved.isFlying(); |
|||
final Location initialSpectatorLocation = spectatorInvolved.getLocation(); |
|||
|
|||
final Vector initialProjectileVelocity = e.getDamager().getVelocity(); |
|||
final Location initialProjectileLocation = e.getDamager().getLocation(); |
|||
final Projectile proj = (Projectile) e.getDamager(); |
|||
|
|||
|
|||
|
|||
if (spectatorInvolved != proj.getShooter()) { |
|||
spectatorInvolved.setAllowFlight(true); |
|||
spectatorInvolved.setFlying(true); |
|||
spectatorInvolved.teleport(initialSpectatorLocation.clone().add(0, 6, 0), TeleportCause.PLUGIN); |
|||
|
|||
Bukkit.getScheduler().runTaskLater(plugin, () -> { |
|||
if (proj instanceof Arrow) { |
|||
final Arrow arrow = initialProjectileLocation.getWorld().spawn(initialProjectileLocation, Arrow.class); |
|||
arrow.setBounce(false); |
|||
arrow.setVelocity(initialProjectileVelocity); |
|||
arrow.setShooter(proj.getShooter()); |
|||
} else if (proj instanceof Snowball) { |
|||
final Snowball snowball = initialProjectileLocation.getWorld().spawn(initialProjectileLocation, Snowball.class); |
|||
snowball.setVelocity(initialProjectileVelocity); |
|||
snowball.setShooter(proj.getShooter()); |
|||
} else if (proj instanceof Egg) { |
|||
final Egg egg = initialProjectileLocation.getWorld().spawn(initialProjectileLocation, Egg.class); |
|||
egg.setVelocity(initialProjectileVelocity); |
|||
egg.setShooter(proj.getShooter()); |
|||
} else if (proj instanceof EnderPearl) { |
|||
final Player p = (Player) proj.getShooter(); |
|||
p.launchProjectile(EnderPearl.class, initialProjectileVelocity); |
|||
} |
|||
}, 1L); |
|||
|
|||
Bukkit.getScheduler().runTaskLater(plugin, () -> { |
|||
spectatorInvolved.teleport(new Location(initialSpectatorLocation.getWorld(), initialSpectatorLocation.getX(), initialSpectatorLocation.getY(), initialSpectatorLocation.getZ(), spectatorInvolved.getLocation().getYaw(), spectatorInvolved.getLocation().getPitch()), TeleportCause.PLUGIN); |
|||
spectatorInvolved.setAllowFlight(true); |
|||
spectatorInvolved.setFlying(wasFlying); |
|||
}, 5L); |
|||
} |
|||
} |
|||
} |
|||
|
|||
@EventHandler(priority = EventPriority.HIGHEST) |
|||
protected void onPotionSplash(PotionSplashEvent e) { |
|||
final ArrayList<UUID> spectatorsAffected = new ArrayList<>(); |
|||
GameFour game = null; |
|||
if (e.getEntity().getShooter() instanceof Player) |
|||
game = plugin.getGM().getGameFourByPlayer((Player)e.getEntity().getShooter()); |
|||
|
|||
for(final LivingEntity player : e.getAffectedEntities()) |
|||
if(player instanceof Player && !player.hasMetadata("NPC") && game.getSpects().contains(player)) |
|||
spectatorsAffected.add(player.getUniqueId()); |
|||
if(!spectatorsAffected.isEmpty()) { |
|||
Boolean teleportationNeeded = false; |
|||
for(final Entity entity : e.getEntity().getNearbyEntities(2, 2, 2)) |
|||
if(entity instanceof Player && !entity.hasMetadata("NPC") && game.getSpects().contains(entity)) |
|||
teleportationNeeded = true; |
|||
final HashMap<UUID,Boolean> oldFlyMode = new HashMap<>(); |
|||
for(final UUID spectatorUUID : spectatorsAffected) { |
|||
final Player spectator = Bukkit.getServer().getPlayer(spectatorUUID); |
|||
e.setIntensity(spectator, 0); |
|||
if(teleportationNeeded) { |
|||
oldFlyMode.put(spectator.getUniqueId(), spectator.isFlying()); |
|||
spectator.setAllowFlight(true); |
|||
spectator.setFlying(true); |
|||
|
|||
spectator.teleport(spectator.getLocation().add(0, 10, 0), TeleportCause.PLUGIN); |
|||
} |
|||
} |
|||
if(teleportationNeeded) { |
|||
|
|||
final Location initialProjectileLocation = e.getEntity().getLocation(); |
|||
final Vector initialProjectileVelocity = e.getEntity().getVelocity(); |
|||
|
|||
Bukkit.getServer().getScheduler().runTaskLater(plugin, () -> { |
|||
final ThrownPotion clonedEntity = (ThrownPotion) e.getEntity().getWorld().spawnEntity(initialProjectileLocation, e.getEntity().getType()); |
|||
clonedEntity.setShooter(e.getEntity().getShooter()); |
|||
clonedEntity.setTicksLived(e.getEntity().getTicksLived()); |
|||
clonedEntity.setFallDistance(e.getEntity().getFallDistance()); |
|||
clonedEntity.setBounce(e.getEntity().doesBounce()); |
|||
if(e.getEntity().getPassenger() != null) |
|||
clonedEntity.setPassenger(e.getEntity().getPassenger()); |
|||
clonedEntity.setItem(e.getEntity().getItem()); |
|||
clonedEntity.setVelocity(initialProjectileVelocity); |
|||
e.getEntity().remove(); |
|||
}, 1L); |
|||
|
|||
Bukkit.getServer().getScheduler().runTaskLater(plugin, () -> { |
|||
for(final UUID spectatorUUID : spectatorsAffected) { |
|||
final Player spectator = Bukkit.getServer().getPlayer(spectatorUUID); |
|||
|
|||
spectator.teleport(spectator.getLocation().add(0, -10, 0), TeleportCause.PLUGIN); |
|||
spectator.setAllowFlight(true); |
|||
spectator.setFlying(oldFlyMode.get(spectatorUUID)); |
|||
} |
|||
}, 5L); |
|||
|
|||
e.setCancelled(true); |
|||
} |
|||
} |
|||
} |
|||
|
|||
@EventHandler |
|||
protected void onPlayerPickupItem(PlayerPickupItemEvent e) { |
|||
final GameFour game = plugin.getGM().getGameFourByPlayer(e.getPlayer()); |
|||
if (game == null) |
|||
return; |
|||
if (game.getSpects().contains(e.getPlayer())) |
|||
e.setCancelled(true); |
|||
} |
|||
|
|||
@EventHandler |
|||
protected void onEntityTarget(EntityTargetEvent e) { |
|||
GameFour game = null; |
|||
if (e.getTarget() instanceof Player) |
|||
game = plugin.getGM().getGameFourByPlayer((Player)e.getTarget()); |
|||
if (game == null) |
|||
return; |
|||
if (e.getTarget() != null && e.getTarget() instanceof Player && !e.getTarget().hasMetadata("NPC") && game.getSpects().contains(e.getTarget())) |
|||
e.setCancelled(true); |
|||
if (e.getTarget() instanceof Player && e.getTarget() != null && game.getSpects().contains(e.getTarget())) |
|||
if (e.getEntity() instanceof ExperienceOrb) { |
|||
repellExpOrb((Player) e.getTarget(), (ExperienceOrb) e.getEntity()); |
|||
e.setCancelled(true); |
|||
e.setTarget(null); |
|||
} |
|||
} |
|||
|
|||
@EventHandler |
|||
protected void onBlockDamage(BlockDamageEvent e) { |
|||
final GameFour game = plugin.getGM().getGameFourByPlayer(e.getPlayer()); |
|||
if (game == null) |
|||
return; |
|||
if (game.getSpects().contains(e.getPlayer())) |
|||
e.setCancelled(true); |
|||
} |
|||
|
|||
@EventHandler |
|||
protected void onEntityDamage(EntityDamageEvent e) { |
|||
GameFour game = null; |
|||
if (e.getEntity() instanceof Player) |
|||
game = plugin.getGM().getGameFourByPlayer((Player)e.getEntity()); |
|||
if (game == null) |
|||
return; |
|||
if (e.getEntity() instanceof Player && !e.getEntity().hasMetadata("NPC") && game.getSpects().contains(e.getEntity())) { |
|||
e.setCancelled(true); |
|||
e.getEntity().setFireTicks(0); |
|||
} |
|||
} |
|||
|
|||
@EventHandler |
|||
protected void onFoodLevelChange(FoodLevelChangeEvent e) { |
|||
GameFour game = null; |
|||
if (e.getEntity() instanceof Player) |
|||
game = plugin.getGM().getGameFourByPlayer((Player)e.getEntity()); |
|||
if (game == null) |
|||
return; |
|||
if (e.getEntity() instanceof Player && !e.getEntity().hasMetadata("NPC") && game.getSpects().contains(e.getEntity())) { |
|||
e.setCancelled(true); |
|||
((Player) e.getEntity()).setFoodLevel(20); |
|||
((Player) e.getEntity()).setSaturation(20); |
|||
} |
|||
} |
|||
@EventHandler |
|||
public void onInventoryDrag(InventoryDragEvent e) { |
|||
final GameFour game = plugin.getGM().getGameFourByPlayer((Player)e.getWhoClicked()); |
|||
if (game == null) |
|||
return; |
|||
if (game.getSpects().contains(e.getWhoClicked())) |
|||
e.setCancelled(true); |
|||
} |
|||
|
|||
@EventHandler |
|||
public void onVehicleEnter(VehicleEnterEvent e) { |
|||
GameFour game = null; |
|||
if (e.getEntered() instanceof Player) |
|||
game = plugin.getGM().getGameFourByPlayer((Player)e.getEntered()); |
|||
if (game == null) |
|||
return; |
|||
if (e.getEntered() instanceof Player && game.getSpects().contains(e.getEntered())) |
|||
e.setCancelled(true); |
|||
} |
|||
|
|||
void repellExpOrb(Player player, ExperienceOrb orb) { |
|||
final Location pLoc = player.getLocation(); |
|||
final Location oLoc = orb.getLocation(); |
|||
final Vector dir = oLoc.toVector().subtract(pLoc.toVector()); |
|||
final double dx = Math.abs(dir.getX()); |
|||
final double dz = Math.abs(dir.getZ()); |
|||
if ( (dx == 0.0) && (dz == 0.0)) |
|||
dir.setX(0.001); |
|||
if ((dx < 3.0) && (dz < 3.0)){ |
|||
final Vector nDir = dir.normalize(); |
|||
final Vector newV = nDir.clone().multiply(0.3); |
|||
newV.setY(0); |
|||
orb.setVelocity(newV); |
|||
if ((dx < 1.0) && (dz < 1.0)) |
|||
orb.teleport(oLoc.clone().add(nDir.multiply(1.0)), TeleportCause.PLUGIN); |
|||
if ((dx < 0.5) && (dz < 0.5)) |
|||
orb.remove(); |
|||
} |
|||
} |
|||
|
|||
} |
@ -0,0 +1,82 @@ |
|||
package cx.sfy.TheBridge.managers; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.HashMap; |
|||
import java.util.List; |
|||
|
|||
import org.bukkit.Material; |
|||
import org.bukkit.configuration.ConfigurationSection; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.inventory.ItemStack; |
|||
import org.bukkit.inventory.meta.ItemMeta; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.archievements.Archi; |
|||
import cx.sfy.TheBridge.archievements.ArchiType; |
|||
|
|||
public class ArchiManager { |
|||
|
|||
Main plugin; |
|||
private HashMap<ArchiType, ArrayList<Archi>> archiements = new HashMap<ArchiType, ArrayList<Archi>>(); |
|||
private ItemStack unlocked = null; |
|||
private ItemStack locked = null; |
|||
|
|||
public ArchiManager(Main plugin) { |
|||
this.plugin = plugin; |
|||
loadArchievements(); |
|||
} |
|||
|
|||
public void loadArchievements() { |
|||
ItemStack unlocked1 = new ItemStack(Material.valueOf(plugin.getAchievement().get("unlocked.item")), plugin.getAchievement().getInt("unlocked.amount"), (short)plugin.getAchievement().getInt("unlocked.data")); |
|||
ItemMeta unlockedM = unlocked1.getItemMeta(); |
|||
unlockedM.setDisplayName(plugin.getAchievement().get("unlocked.name")); |
|||
List<String> un = new ArrayList<String>(); |
|||
for (String u : plugin.getAchievement().getList("unlocked.lore")) { |
|||
un.add(u); |
|||
} |
|||
unlockedM.setLore(un); |
|||
unlocked1.setItemMeta(unlockedM); |
|||
unlocked = unlocked1; |
|||
ItemStack locked1 = new ItemStack(Material.valueOf(plugin.getAchievement().get("locked.item")), plugin.getAchievement().getInt("locked.amount"), (short)plugin.getAchievement().getInt("locked.data")); |
|||
ItemMeta lockedM = locked1.getItemMeta(); |
|||
lockedM.setDisplayName(plugin.getAchievement().get("locked.name")); |
|||
List<String> lo = new ArrayList<String>(); |
|||
for (String l : plugin.getAchievement().getList("locked.lore")) { |
|||
lo.add(l); |
|||
} |
|||
lockedM.setLore(lo); |
|||
locked1.setItemMeta(lockedM); |
|||
locked = locked1; |
|||
ConfigurationSection conf = plugin.getAchievement().getConfig().getConfigurationSection("archievements"); |
|||
for (String msg : conf.getKeys(false)) { |
|||
ArchiType type = ArchiType.valueOf(plugin.getAchievement().get("archievements." + msg + ".type")); |
|||
if (!archiements.containsKey(type)) { |
|||
archiements.put(type, new ArrayList<Archi>()); |
|||
archiements.get(type).add(new Archi(plugin, "archievements." + msg)); |
|||
} else { |
|||
archiements.get(type).add(new Archi(plugin, "archievements." + msg)); |
|||
} |
|||
} |
|||
} |
|||
|
|||
public void check(Player p, int amount, ArchiType type) { |
|||
for (Archi archi : archiements.get(type)) { |
|||
if (archi.getMax() == amount) { |
|||
archi.execute(p); |
|||
} |
|||
} |
|||
} |
|||
|
|||
public ItemStack getUnlocked() { |
|||
return unlocked; |
|||
} |
|||
|
|||
public ItemStack getLocked() { |
|||
return locked; |
|||
} |
|||
|
|||
public HashMap<ArchiType, ArrayList<Archi>> getArchiements() { |
|||
return archiements; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,70 @@ |
|||
package cx.sfy.TheBridge.managers; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.HashMap; |
|||
import java.util.List; |
|||
|
|||
import org.bukkit.configuration.ConfigurationSection; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.cosmetics.cages.Cage; |
|||
|
|||
public class CageManager { |
|||
|
|||
Main plugin; |
|||
private HashMap<String, Cage> cages = new HashMap<String, Cage>(); |
|||
private List<String> unlocked = null; |
|||
private List<String> locked = null; |
|||
private List<String> noPerm = null; |
|||
|
|||
public CageManager(Main plugin) { |
|||
this.plugin = plugin; |
|||
loadCages(); |
|||
} |
|||
|
|||
public void loadCages() { |
|||
List<String> un = new ArrayList<String>(); |
|||
for (String u : plugin.getCages().getList("unlocked")) { |
|||
un.add(u); |
|||
} |
|||
unlocked = un; |
|||
List<String> lo = new ArrayList<String>(); |
|||
for (String l : plugin.getCages().getList("locked")) { |
|||
lo.add(l); |
|||
} |
|||
locked = lo; |
|||
List<String> pe = new ArrayList<String>(); |
|||
for (String p : plugin.getCages().getList("noPerm")) { |
|||
pe.add(p); |
|||
} |
|||
noPerm = pe; |
|||
ConfigurationSection conf = plugin.getCages().getConfig().getConfigurationSection("cages"); |
|||
for (String cage : conf.getKeys(false)) { |
|||
cages.put(cage, new Cage(plugin, "cages." + cage, cage)); |
|||
} |
|||
} |
|||
|
|||
public Cage getCageByName(String name) { |
|||
if (cages.containsKey(name)) { |
|||
return cages.get(name); |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
public HashMap<String, Cage> getCages() { |
|||
return cages; |
|||
} |
|||
|
|||
public List<String> getUnlocked() { |
|||
return unlocked; |
|||
} |
|||
|
|||
public List<String> getLocked() { |
|||
return locked; |
|||
} |
|||
|
|||
public List<String> getNoPerm() { |
|||
return noPerm; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,44 @@ |
|||
package cx.sfy.TheBridge.managers; |
|||
|
|||
import java.io.File; |
|||
import java.io.IOException; |
|||
|
|||
import org.bukkit.configuration.file.YamlConfiguration; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
|
|||
public class FileManager { |
|||
|
|||
Main plugin; |
|||
|
|||
public FileManager(Main plugin) { |
|||
this.plugin = plugin; |
|||
} |
|||
|
|||
public void createNewFile(String file) { |
|||
File arenayml = new File(plugin.getDataFolder() + "/arenas", file + ".yml"); |
|||
YamlConfiguration config = YamlConfiguration.loadConfiguration(arenayml); |
|||
try { |
|||
config.save(arenayml); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
public boolean arenaExists(String file) { |
|||
File folder = new File(plugin.getDataFolder() + "/arenas"); |
|||
File[] listFiles = folder.listFiles(); |
|||
String name = ""; |
|||
for (int f = 0; f < listFiles.length; f++) { |
|||
if (listFiles[f].isFile()) { |
|||
File arena = listFiles[f]; |
|||
name = arena.getName().replaceAll(".yml", ""); |
|||
if (name.equals(file)) { |
|||
return true; |
|||
} |
|||
} |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,380 @@ |
|||
package cx.sfy.TheBridge.managers; |
|||
|
|||
import java.io.File; |
|||
import java.io.IOException; |
|||
import java.util.ArrayList; |
|||
import java.util.HashMap; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.Location; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.event.inventory.InventoryType; |
|||
import org.bukkit.inventory.Inventory; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.game.Game; |
|||
import cx.sfy.TheBridge.game.GameFour; |
|||
|
|||
import org.bukkit.World; |
|||
import org.bukkit.configuration.file.FileConfiguration; |
|||
import org.bukkit.configuration.file.YamlConfiguration; |
|||
|
|||
import net.md_5.bungee.api.ChatColor; |
|||
|
|||
public class GameManager { |
|||
|
|||
private ArrayList<Game> normalGames; |
|||
private ArrayList<GameFour> fourGames; |
|||
private HashMap<Player, Game> playerGame; |
|||
private HashMap<Player, GameFour> playerGameFour; |
|||
private Inventory kit; |
|||
Main plugin; |
|||
|
|||
public GameManager(Main plugin) { |
|||
this.plugin = plugin; |
|||
this.normalGames = new ArrayList<>(); |
|||
this.fourGames = new ArrayList<>(); |
|||
this.playerGame = new HashMap<Player, Game>(); |
|||
this.playerGameFour = new HashMap<Player, GameFour>(); |
|||
this.kit = Bukkit.getServer().createInventory(null, InventoryType.PLAYER); |
|||
if (plugin.getConfig().getString("kit") == null) { |
|||
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "No hay un kit establecido. Usa " + ChatColor.YELLOW + "/bridges setkit"); |
|||
} else { |
|||
try { |
|||
kit.setContents(plugin.getKit().fromBase64(plugin.getConfig().getString("kit")).getContents()); |
|||
} catch (IllegalArgumentException e) { |
|||
e.printStackTrace(); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
this.loadGames(); |
|||
} |
|||
|
|||
public void reloadKit() { |
|||
try { |
|||
kit.setContents(plugin.getKit().fromBase64(plugin.getConfig().getString("kit")).getContents()); |
|||
} catch (IllegalArgumentException e) { |
|||
e.printStackTrace(); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
public Inventory getKit() { |
|||
return kit; |
|||
} |
|||
|
|||
public void resetNormalGame(String file) { |
|||
Game prev = null; |
|||
for (Game game : normalGames) { |
|||
if (game.getName().equals(file)) { |
|||
prev = game; |
|||
} |
|||
} |
|||
normalGames.remove(prev); |
|||
File arena = new File(plugin.getDataFolder() + "/arenas/" + file + ".yml"); |
|||
FileConfiguration yml = YamlConfiguration.loadConfiguration(arena); |
|||
String name = yml.getString("name"); |
|||
if (yml.getString("locations.lobby") == null) { |
|||
Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.RED + "El mapa " + ChatColor.YELLOW + name + " " + ChatColor.RED + "no tiene seteado el Lobby."); |
|||
} |
|||
if (yml.getString("locations.spect") == null) { |
|||
Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.RED + "El mapa " + ChatColor.YELLOW + name + " " + ChatColor.RED + "no tiene seteado el Spectador."); |
|||
} |
|||
Location hRed = null; |
|||
Location hBlue = null; |
|||
if (yml.get("locations.holograms.red") != null) { |
|||
hRed = getStringLocation(yml.getString("locations.holograms.red")); |
|||
} |
|||
if (yml.get("locations.holograms.blue") != null) { |
|||
hBlue = getStringLocation(yml.getString("locations.holograms.blue")); |
|||
} |
|||
plugin.getWC().resetWorld(name); |
|||
int min = yml.getInt("minPlayers"); |
|||
int teamSize = yml.getInt("teamSize"); |
|||
int starting = yml.getInt("timers.starting"); |
|||
int prestart = yml.getInt("timers.prestart"); |
|||
int restart = yml.getInt("timers.restart"); |
|||
String lobby = yml.getString("locations.lobby"); |
|||
String spect = yml.getString("locations.spect"); |
|||
String buildMin = yml.getString("locations.build.min"); |
|||
String buildMax = yml.getString("locations.build.max"); |
|||
String spawnsRed = yml.getString("locations.spawns.red"); |
|||
String spawnsBlue = yml.getString("locations.spawns.blue"); |
|||
String respawnsRed = yml.getString("locations.respawns.red"); |
|||
String respawnsBlue = yml.getString("locations.respawns.blue"); |
|||
ArrayList<Location> portalRed = new ArrayList<Location>(); |
|||
for (String locRed : yml.getStringList("locations.portal.red")) { |
|||
portalRed.add(getStringLocation(locRed)); |
|||
} |
|||
ArrayList<Location> portalBlue = new ArrayList<Location>(); |
|||
for (String locBlue : yml.getStringList("locations.portal.blue")) { |
|||
portalBlue.add(getStringLocation(locBlue)); |
|||
} |
|||
normalGames.add(new Game(plugin, name, min, 2 * teamSize, teamSize, starting, prestart, restart, getStringLocation(lobby), getStringLocation(spect), getStringLocation(buildMin), getStringLocation(buildMax), getStringLocation(spawnsRed), getStringLocation(spawnsBlue), portalRed, portalBlue, getStringLocation(respawnsRed), getStringLocation(respawnsBlue), hRed, hBlue)); |
|||
} |
|||
|
|||
public void resetFourGame(String file) { |
|||
GameFour prev = null; |
|||
for (GameFour game : fourGames) { |
|||
if (game.getName().equals(file)) { |
|||
prev = game; |
|||
} |
|||
} |
|||
fourGames.remove(prev); |
|||
File arena = new File(plugin.getDataFolder() + "/arenas/" + file + ".yml"); |
|||
FileConfiguration yml = YamlConfiguration.loadConfiguration(arena); |
|||
String name = yml.getString("name"); |
|||
plugin.getWC().resetWorld(name); |
|||
Location hRed = null; |
|||
Location hBlue = null; |
|||
Location hGreen = null; |
|||
Location hYellow = null; |
|||
if (yml.get("locations.holograms.red") != null) { |
|||
hRed = getStringLocation(yml.getString("locations.holograms.red")); |
|||
} |
|||
if (yml.get("locations.holograms.blue") != null) { |
|||
hBlue = getStringLocation(yml.getString("locations.holograms.blue")); |
|||
} |
|||
if (yml.get("locations.holograms.green") != null) { |
|||
hGreen = getStringLocation(yml.getString("locations.holograms.green")); |
|||
} |
|||
if (yml.get("locations.holograms.yellow") != null) { |
|||
hYellow = getStringLocation(yml.getString("locations.holograms.yellow")); |
|||
} |
|||
int min = yml.getInt("minPlayers"); |
|||
int teamSize = yml.getInt("teamSize"); |
|||
int starting = yml.getInt("timers.starting"); |
|||
int prestart = yml.getInt("timers.prestart"); |
|||
String lobby = yml.getString("locations.lobby"); |
|||
String spect = yml.getString("locations.spect"); |
|||
String buildMin = yml.getString("locations.build.min"); |
|||
String buildMax = yml.getString("locations.build.max"); |
|||
String spawnsRed = yml.getString("locations.spawns.red"); |
|||
String spawnsBlue = yml.getString("locations.spawns.blue"); |
|||
String spawnsGreen = yml.getString("locations.spawns.green"); |
|||
String spawnsYellow = yml.getString("locations.spawns.yellow"); |
|||
String respawnsRed = yml.getString("locations.respawns.red"); |
|||
String respawnsBlue = yml.getString("locations.respawns.blue"); |
|||
String respawnsGreen = yml.getString("locations.respawns.green"); |
|||
String respawnsYellow = yml.getString("locations.respawns.yellow"); |
|||
ArrayList<Location> portalRed = new ArrayList<Location>(); |
|||
for (String locRed : yml.getStringList("locations.portal.red")) { |
|||
portalRed.add(getStringLocation(locRed)); |
|||
} |
|||
ArrayList<Location> portalBlue = new ArrayList<Location>(); |
|||
for (String locBlue : yml.getStringList("locations.portal.blue")) { |
|||
portalBlue.add(getStringLocation(locBlue)); |
|||
} |
|||
ArrayList<Location> portalGreen = new ArrayList<Location>(); |
|||
for (String locGreen : yml.getStringList("locations.portal.green")) { |
|||
portalGreen.add(getStringLocation(locGreen)); |
|||
} |
|||
ArrayList<Location> portalYellow = new ArrayList<Location>(); |
|||
for (String locYellow : yml.getStringList("locations.portal.yellow")) { |
|||
portalYellow.add(getStringLocation(locYellow)); |
|||
} |
|||
fourGames.add(new GameFour(plugin, name, min, 4 * teamSize, teamSize, starting, prestart, getStringLocation(lobby), getStringLocation(spect), getStringLocation(buildMin), getStringLocation(buildMax), getStringLocation(spawnsRed), getStringLocation(spawnsBlue), getStringLocation(spawnsGreen), getStringLocation(spawnsYellow), getStringLocation(respawnsRed), getStringLocation(respawnsBlue), getStringLocation(respawnsGreen), getStringLocation(respawnsYellow), portalRed, portalBlue, portalGreen, portalYellow, hRed, hBlue, hGreen, hYellow)); |
|||
} |
|||
|
|||
public void loadGames() { |
|||
File folder = new File(plugin.getDataFolder() + "/arenas"); |
|||
File[] listFiles = folder.listFiles(); |
|||
for (int f = 0; f < listFiles.length; f++) { |
|||
if (listFiles[f].isFile()) { |
|||
File arena = listFiles[f]; |
|||
FileConfiguration yml = YamlConfiguration.loadConfiguration(arena); |
|||
if (yml.getString("mode").toLowerCase().equals("normal")) { |
|||
String name = yml.getString("name"); |
|||
if (yml.getString("locations.lobby") == null) { |
|||
Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.RED + "El mapa " + ChatColor.YELLOW + name + " " + ChatColor.RED + "no tiene seteado el Lobby."); |
|||
continue; |
|||
} |
|||
if (yml.getString("locations.spect") == null) { |
|||
Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.RED + "El mapa " + ChatColor.YELLOW + name + " " + ChatColor.RED + "no tiene seteado el Spectador."); |
|||
continue; |
|||
} |
|||
plugin.getWC().resetWorld(name); |
|||
Location hRed = null; |
|||
Location hBlue = null; |
|||
if (yml.get("locations.holograms.red") != null) { |
|||
hRed = getStringLocation(yml.getString("locations.holograms.red")); |
|||
} |
|||
if (yml.get("locations.holograms.blue") != null) { |
|||
hBlue = getStringLocation(yml.getString("locations.holograms.blue")); |
|||
} |
|||
int min = yml.getInt("minPlayers"); |
|||
int teamSize = yml.getInt("teamSize"); |
|||
int starting = yml.getInt("timers.starting"); |
|||
int prestart = yml.getInt("timers.prestart"); |
|||
int restart = yml.getInt("timers.restart"); |
|||
String lobby = yml.getString("locations.lobby"); |
|||
String spect = yml.getString("locations.spect"); |
|||
String buildMin = yml.getString("locations.build.min"); |
|||
String buildMax = yml.getString("locations.build.max"); |
|||
String spawnsRed = yml.getString("locations.spawns.red"); |
|||
String spawnsBlue = yml.getString("locations.spawns.blue"); |
|||
String respawnsRed = yml.getString("locations.respawns.red"); |
|||
String respawnsBlue = yml.getString("locations.respawns.blue"); |
|||
ArrayList<Location> portalRed = new ArrayList<Location>(); |
|||
for (String locRed : yml.getStringList("locations.portal.red")) { |
|||
portalRed.add(getStringLocation(locRed)); |
|||
} |
|||
ArrayList<Location> portalBlue = new ArrayList<Location>(); |
|||
for (String locBlue : yml.getStringList("locations.portal.blue")) { |
|||
portalBlue.add(getStringLocation(locBlue)); |
|||
} |
|||
normalGames.add(new Game(plugin, name, min, 2 * teamSize, teamSize, starting, prestart, restart, getStringLocation(lobby), getStringLocation(spect), getStringLocation(buildMin), getStringLocation(buildMax), getStringLocation(spawnsRed), getStringLocation(spawnsBlue), portalRed, portalBlue, getStringLocation(respawnsRed), getStringLocation(respawnsBlue), hRed, hBlue)); |
|||
} |
|||
if (yml.getString("mode").toLowerCase().equals("four")) { |
|||
String name = yml.getString("name"); |
|||
plugin.getWC().resetWorld(name); |
|||
int min = yml.getInt("minPlayers"); |
|||
Location hRed = null; |
|||
Location hBlue = null; |
|||
Location hGreen = null; |
|||
Location hYellow = null; |
|||
if (yml.get("locations.holograms.red") != null) { |
|||
hRed = getStringLocation(yml.getString("locations.holograms.red")); |
|||
} |
|||
if (yml.get("locations.holograms.blue") != null) { |
|||
hBlue = getStringLocation(yml.getString("locations.holograms.blue")); |
|||
} |
|||
if (yml.get("locations.holograms.green") != null) { |
|||
hGreen = getStringLocation(yml.getString("locations.holograms.green")); |
|||
} |
|||
if (yml.get("locations.holograms.yellow") != null) { |
|||
hYellow = getStringLocation(yml.getString("locations.holograms.yellow")); |
|||
} |
|||
int teamSize = yml.getInt("teamSize"); |
|||
int starting = yml.getInt("timers.starting"); |
|||
int prestart = yml.getInt("timers.prestart"); |
|||
String lobby = yml.getString("locations.lobby"); |
|||
String spect = yml.getString("locations.spect"); |
|||
String buildMin = yml.getString("locations.build.min"); |
|||
String buildMax = yml.getString("locations.build.max"); |
|||
String spawnsRed = yml.getString("locations.spawns.red"); |
|||
String spawnsBlue = yml.getString("locations.spawns.blue"); |
|||
String spawnsGreen = yml.getString("locations.spawns.green"); |
|||
String spawnsYellow = yml.getString("locations.spawns.yellow"); |
|||
String respawnsRed = yml.getString("locations.respawns.red"); |
|||
String respawnsBlue = yml.getString("locations.respawns.blue"); |
|||
String respawnsGreen = yml.getString("locations.respawns.green"); |
|||
String respawnsYellow = yml.getString("locations.respawns.yellow"); |
|||
ArrayList<Location> portalRed = new ArrayList<Location>(); |
|||
for (String locRed : yml.getStringList("locations.portal.red")) { |
|||
portalRed.add(getStringLocation(locRed)); |
|||
} |
|||
ArrayList<Location> portalBlue = new ArrayList<Location>(); |
|||
for (String locBlue : yml.getStringList("locations.portal.blue")) { |
|||
portalBlue.add(getStringLocation(locBlue)); |
|||
} |
|||
ArrayList<Location> portalGreen = new ArrayList<Location>(); |
|||
for (String locGreen : yml.getStringList("locations.portal.green")) { |
|||
portalGreen.add(getStringLocation(locGreen)); |
|||
} |
|||
ArrayList<Location> portalYellow = new ArrayList<Location>(); |
|||
for (String locYellow : yml.getStringList("locations.portal.yellow")) { |
|||
portalYellow.add(getStringLocation(locYellow)); |
|||
} |
|||
fourGames.add(new GameFour(plugin, name, min, 4 * teamSize, teamSize, starting, prestart, getStringLocation(lobby), getStringLocation(spect), getStringLocation(buildMin), getStringLocation(buildMax), getStringLocation(spawnsRed), getStringLocation(spawnsBlue), getStringLocation(spawnsGreen), getStringLocation(spawnsYellow), getStringLocation(respawnsRed), getStringLocation(respawnsBlue), getStringLocation(respawnsGreen), getStringLocation(respawnsYellow), portalRed, portalBlue, portalGreen, portalYellow, hRed, hBlue, hGreen, hYellow)); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
public void addPlayerGame(Player p, Game game) { |
|||
playerGame.put(p, game); |
|||
game.addPlayer(p); |
|||
} |
|||
|
|||
public void addPlayerGameFour(Player p, GameFour game) { |
|||
playerGameFour.put(p, game); |
|||
game.addPlayer(p); |
|||
} |
|||
|
|||
public void removePlayerGame(Player p, Game game) { |
|||
game.removePlayer(p); |
|||
playerGame.remove(p); |
|||
plugin.getSB().update(p); |
|||
} |
|||
|
|||
public void removePlayerGameFour(Player p, GameFour game) { |
|||
game.removePlayer(p); |
|||
playerGameFour.remove(p); |
|||
plugin.getSB().update(p); |
|||
} |
|||
|
|||
public void removePlayerAllGames(Player p) { |
|||
for (Game game : normalGames) { |
|||
if (game.getGamePlayers().contains(p)) { |
|||
game.removePlayer(p); |
|||
playerGame.remove(p); |
|||
plugin.getSB().update(p); |
|||
} |
|||
} |
|||
} |
|||
|
|||
public void removePlayerFourGames(Player p) { |
|||
for (GameFour game : fourGames) { |
|||
if (game.getPlayers().contains(p)) { |
|||
game.removePlayer(p); |
|||
playerGameFour.remove(p); |
|||
plugin.getSB().update(p); |
|||
} |
|||
} |
|||
} |
|||
|
|||
public Game getGameByPlayer(Player p) { |
|||
if (playerGame.containsKey(p)) { |
|||
return playerGame.get(p); |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
public GameFour getGameFourByPlayer(Player p) { |
|||
if (playerGameFour.containsKey(p)) { |
|||
return playerGameFour.get(p); |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
public Game getGameByName(String name) { |
|||
for (Game game : normalGames) { |
|||
if (game.getName().equals(name)) { |
|||
return game; |
|||
} |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
public GameFour getGameFourByName(String name) { |
|||
for (GameFour game : fourGames) { |
|||
if (game.getName().equals(name)) { |
|||
return game; |
|||
} |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
public Location getStringLocation(String location) { |
|||
String[] l = location.split(";"); |
|||
World world = Bukkit.getWorld(l[0]); |
|||
double x = Double.parseDouble(l[1]); |
|||
double y = Double.parseDouble(l[2]); |
|||
double z = Double.parseDouble(l[3]); |
|||
float yaw = Float.parseFloat(l[4]); |
|||
float pitch = Float.parseFloat(l[5]); |
|||
return new Location(world, x, y, z, yaw, pitch); |
|||
} |
|||
|
|||
public ArrayList<Game> getGames(){ |
|||
return normalGames; |
|||
} |
|||
|
|||
public ArrayList<GameFour> getGamesFour(){ |
|||
return fourGames; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,252 @@ |
|||
package cx.sfy.TheBridge.managers; |
|||
|
|||
import org.bukkit.ChatColor; |
|||
import org.bukkit.Location; |
|||
import org.bukkit.Material; |
|||
import org.bukkit.World; |
|||
|
|||
public class GlassManager { |
|||
|
|||
@SuppressWarnings("deprecation") |
|||
public void createCage(Location loc, ChatColor team) { |
|||
World world = loc.getWorld(); |
|||
int x = loc.getBlockX(); |
|||
int y = loc.getBlockY(); |
|||
int z = loc.getBlockZ(); |
|||
world.getBlockAt(x, y, z).setType(Material.GLASS); |
|||
world.getBlockAt(x, y, z + 1).setType(Material.GLASS); |
|||
world.getBlockAt(x, y, z - 1).setType(Material.GLASS); |
|||
world.getBlockAt(x + 1, y, z).setType(Material.GLASS); |
|||
world.getBlockAt(x - 1, y, z).setType(Material.GLASS); |
|||
world.getBlockAt(x + 1, y, z + 1).setType(Material.GLASS); |
|||
world.getBlockAt(x + 1, y, z - 1).setType(Material.GLASS); |
|||
world.getBlockAt(x - 1, y, z + 1).setType(Material.GLASS); |
|||
world.getBlockAt(x - 1, y, z - 1).setType(Material.GLASS); |
|||
world.getBlockAt(x, y, z + 2).setType(Material.GLASS); |
|||
world.getBlockAt(x, y, z - 2).setType(Material.GLASS); |
|||
world.getBlockAt(x + 2, y, z).setType(Material.GLASS); |
|||
world.getBlockAt(x - 2, y, z).setType(Material.GLASS); |
|||
world.getBlockAt(x + 1, y, z + 2).setType(Material.GLASS); |
|||
world.getBlockAt(x + 1, y, z - 2).setType(Material.GLASS); |
|||
world.getBlockAt(x + 2, y, z + 1).setType(Material.GLASS); |
|||
world.getBlockAt(x - 2, y, z + 1).setType(Material.GLASS); |
|||
world.getBlockAt(x + 2, y, z + 2).setType(Material.GLASS); |
|||
world.getBlockAt(x + 2, y, z - 2).setType(Material.GLASS); |
|||
world.getBlockAt(x - 2, y, z - 2).setType(Material.GLASS); |
|||
world.getBlockAt(x - 2, y, z + 2).setType(Material.GLASS); |
|||
world.getBlockAt(x + 1, y, z + 2).setType(Material.GLASS); |
|||
world.getBlockAt(x + 1, y, z - 2).setType(Material.GLASS); |
|||
world.getBlockAt(x + 2, y, z + 1).setType(Material.GLASS); |
|||
world.getBlockAt(x - 2, y, z + 1).setType(Material.GLASS); |
|||
world.getBlockAt(x - 1, y, z - 2).setType(Material.GLASS); |
|||
world.getBlockAt(x - 1, y, z + 2).setType(Material.GLASS); |
|||
world.getBlockAt(x + 2, y, z - 1).setType(Material.GLASS); |
|||
world.getBlockAt(x - 2, y, z - 1).setType(Material.GLASS); |
|||
world.getBlockAt(x, y + 1, z - 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 1, y + 1, z - 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 2, y + 1, z - 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 2, y + 1, z - 1).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 2, y + 1, z).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 1, y + 1, z - 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 2, y + 1, z - 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 2, y + 1, z - 1).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 2, y + 1, z).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 2, y + 1, z + 1).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 2, y + 1, z + 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 1, y + 1, z + 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x, y + 1, z + 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 1, y + 1, z + 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 2, y + 1, z + 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 2, y + 1, z + 1).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 2, y + 1, z).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x, y + 2, z - 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 1, y + 2, z - 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 2, y + 2, z - 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 2, y + 2, z - 1).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 2, y + 2, z).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 1, y + 2, z - 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 2, y + 2, z - 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 2, y + 2, z - 1).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 2, y + 2, z).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 2, y + 2, z + 1).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 2, y + 2, z + 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 1, y + 2, z + 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x, y + 2, z + 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 1, y + 2, z + 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 2, y + 2, z + 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 2, y + 2, z + 1).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 2, y + 2, z).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x, y + 3, z - 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 1, y + 3, z - 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 2, y + 3, z - 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 2, y + 3, z - 1).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 2, y + 3, z).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 1, y + 3, z - 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 2, y + 3, z - 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 2, y + 3, z - 1).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 2, y + 3, z).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 2, y + 3, z + 1).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 2, y + 3, z + 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x - 1, y + 3, z + 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x, y + 3, z + 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 1, y + 3, z + 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 2, y + 3, z + 2).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 2, y + 3, z + 1).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x + 2, y + 3, z).setType(Material.STAINED_GLASS); |
|||
world.getBlockAt(x, y + 1, z - 2).setData(getColor(team)); |
|||
world.getBlockAt(x + 1, y + 1, z - 2).setData(getColor(team)); |
|||
world.getBlockAt(x + 2, y + 1, z - 2).setData(getColor(team)); |
|||
world.getBlockAt(x + 2, y + 1, z - 1).setData(getColor(team)); |
|||
world.getBlockAt(x + 2, y + 1, z).setData(getColor(team)); |
|||
world.getBlockAt(x - 1, y + 1, z - 2).setData(getColor(team)); |
|||
world.getBlockAt(x - 2, y + 1, z - 2).setData(getColor(team)); |
|||
world.getBlockAt(x - 2, y + 1, z - 1).setData(getColor(team)); |
|||
world.getBlockAt(x - 2, y + 1, z).setData(getColor(team)); |
|||
world.getBlockAt(x - 2, y + 1, z + 1).setData(getColor(team)); |
|||
world.getBlockAt(x - 2, y + 1, z + 2).setData(getColor(team)); |
|||
world.getBlockAt(x - 1, y + 1, z + 2).setData(getColor(team)); |
|||
world.getBlockAt(x, y + 1, z + 2).setData(getColor(team)); |
|||
world.getBlockAt(x + 1, y + 1, z + 2).setData(getColor(team)); |
|||
world.getBlockAt(x + 2, y + 1, z + 2).setData(getColor(team)); |
|||
world.getBlockAt(x + 2, y + 1, z + 1).setData(getColor(team)); |
|||
world.getBlockAt(x + 2, y + 1, z).setData(getColor(team)); |
|||
world.getBlockAt(x, y + 2, z - 2).setData(getColor(team)); |
|||
world.getBlockAt(x + 1, y + 2, z - 2).setData(getColor(team)); |
|||
world.getBlockAt(x + 2, y + 2, z - 2).setData(getColor(team)); |
|||
world.getBlockAt(x + 2, y + 2, z - 1).setData(getColor(team)); |
|||
world.getBlockAt(x + 2, y + 2, z).setData(getColor(team)); |
|||
world.getBlockAt(x - 1, y + 2, z - 2).setData(getColor(team)); |
|||
world.getBlockAt(x - 2, y + 2, z - 2).setData(getColor(team)); |
|||
world.getBlockAt(x - 2, y + 2, z - 1).setData(getColor(team)); |
|||
world.getBlockAt(x - 2, y + 2, z).setData(getColor(team)); |
|||
world.getBlockAt(x - 2, y + 2, z + 1).setData(getColor(team)); |
|||
world.getBlockAt(x - 2, y + 2, z + 2).setData(getColor(team)); |
|||
world.getBlockAt(x - 1, y + 2, z + 2).setData(getColor(team)); |
|||
world.getBlockAt(x, y + 2, z + 2).setData(getColor(team)); |
|||
world.getBlockAt(x + 1, y + 2, z + 2).setData(getColor(team)); |
|||
world.getBlockAt(x + 2, y + 2, z + 2).setData(getColor(team)); |
|||
world.getBlockAt(x + 2, y + 2, z + 1).setData(getColor(team)); |
|||
world.getBlockAt(x + 2, y + 2, z).setData(getColor(team)); |
|||
world.getBlockAt(x, y + 3, z - 2).setData(getColor(team)); |
|||
world.getBlockAt(x + 1, y + 3, z - 2).setData(getColor(team)); |
|||
world.getBlockAt(x + 2, y + 3, z - 2).setData(getColor(team)); |
|||
world.getBlockAt(x + 2, y + 3, z - 1).setData(getColor(team)); |
|||
world.getBlockAt(x + 2, y + 3, z).setData(getColor(team)); |
|||
world.getBlockAt(x - 1, y + 3, z - 2).setData(getColor(team)); |
|||
world.getBlockAt(x - 2, y + 3, z - 2).setData(getColor(team)); |
|||
world.getBlockAt(x - 2, y + 3, z - 1).setData(getColor(team)); |
|||
world.getBlockAt(x - 2, y + 3, z).setData(getColor(team)); |
|||
world.getBlockAt(x - 2, y + 3, z + 1).setData(getColor(team)); |
|||
world.getBlockAt(x - 2, y + 3, z + 2).setData(getColor(team)); |
|||
world.getBlockAt(x - 1, y + 3, z + 2).setData(getColor(team)); |
|||
world.getBlockAt(x, y + 3, z + 2).setData(getColor(team)); |
|||
world.getBlockAt(x + 1, y + 3, z + 2).setData(getColor(team)); |
|||
world.getBlockAt(x + 2, y + 3, z + 2).setData(getColor(team)); |
|||
world.getBlockAt(x + 2, y + 3, z + 1).setData(getColor(team)); |
|||
world.getBlockAt(x + 2, y + 3, z).setData(getColor(team)); |
|||
} |
|||
|
|||
public void removeGlass(Location loc) { |
|||
World world = loc.getWorld(); |
|||
int x = loc.getBlockX(); |
|||
int y = loc.getBlockY(); |
|||
int z = loc.getBlockZ(); |
|||
world.getBlockAt(x, y, z).setType(Material.AIR); |
|||
world.getBlockAt(x, y, z + 1).setType(Material.AIR); |
|||
world.getBlockAt(x, y, z - 1).setType(Material.AIR); |
|||
world.getBlockAt(x + 1, y, z).setType(Material.AIR); |
|||
world.getBlockAt(x - 1, y, z).setType(Material.AIR); |
|||
world.getBlockAt(x + 1, y, z + 1).setType(Material.AIR); |
|||
world.getBlockAt(x + 1, y, z - 1).setType(Material.AIR); |
|||
world.getBlockAt(x - 1, y, z + 1).setType(Material.AIR); |
|||
world.getBlockAt(x - 1, y, z - 1).setType(Material.AIR); |
|||
world.getBlockAt(x, y, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x, y, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y, z).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y, z).setType(Material.AIR); |
|||
world.getBlockAt(x + 1, y, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 1, y, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y, z + 1).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y, z + 1).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 1, y, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 1, y, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y, z + 1).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y, z + 1).setType(Material.AIR); |
|||
world.getBlockAt(x - 1, y, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x - 1, y, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y, z - 1).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y, z - 1).setType(Material.AIR); |
|||
world.getBlockAt(x, y + 1, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 1, y + 1, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y + 1, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y + 1, z - 1).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y + 1, z).setType(Material.AIR); |
|||
world.getBlockAt(x - 1, y + 1, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y + 1, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y + 1, z - 1).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y + 1, z).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y + 1, z + 1).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y + 1, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x - 1, y + 1, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x, y + 1, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 1, y + 1, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y + 1, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y + 1, z + 1).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y + 1, z).setType(Material.AIR); |
|||
world.getBlockAt(x, y + 2, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 1, y + 2, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y + 2, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y + 2, z - 1).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y + 2, z).setType(Material.AIR); |
|||
world.getBlockAt(x - 1, y + 2, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y + 2, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y + 2, z - 1).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y + 2, z).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y + 2, z + 1).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y + 2, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x - 1, y + 2, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x, y + 2, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 1, y + 2, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y + 2, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y + 2, z + 1).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y + 2, z).setType(Material.AIR); |
|||
world.getBlockAt(x, y + 3, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 1, y + 3, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y + 3, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y + 3, z - 1).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y + 3, z).setType(Material.AIR); |
|||
world.getBlockAt(x - 1, y + 3, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y + 3, z - 2).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y + 3, z - 1).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y + 3, z).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y + 3, z + 1).setType(Material.AIR); |
|||
world.getBlockAt(x - 2, y + 3, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x - 1, y + 3, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x, y + 3, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 1, y + 3, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y + 3, z + 2).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y + 3, z + 1).setType(Material.AIR); |
|||
world.getBlockAt(x + 2, y + 3, z).setType(Material.AIR); |
|||
} |
|||
|
|||
public byte getColor(ChatColor team) { |
|||
if (team.equals(ChatColor.RED)) { |
|||
return 14; |
|||
} |
|||
if (team.equals(ChatColor.BLUE)) { |
|||
return 11; |
|||
} |
|||
if (team.equals(ChatColor.YELLOW)) { |
|||
return 4; |
|||
} |
|||
if (team.equals(ChatColor.GREEN)) { |
|||
return 5; |
|||
} |
|||
return 0; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,5 @@ |
|||
package cx.sfy.TheBridge.managers; |
|||
|
|||
public class KillSoundManager { |
|||
|
|||
} |
@ -0,0 +1,128 @@ |
|||
package cx.sfy.TheBridge.managers; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.Location; |
|||
import org.bukkit.entity.Player; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
|
|||
public class LocationManager { |
|||
|
|||
private Location nkills; |
|||
private Location nwins; |
|||
private Location ngoals; |
|||
private Location fkills; |
|||
private Location fwins; |
|||
private Location fgoals; |
|||
private Location stats; |
|||
Main plugin; |
|||
|
|||
public LocationManager(Main plugin) { |
|||
this.plugin = plugin; |
|||
} |
|||
|
|||
public void setMainLobby(Player p) { |
|||
Location loc = p.getLocation(); |
|||
String world = loc.getWorld().getName(); |
|||
double x = loc.getX(); |
|||
double y = loc.getY(); |
|||
double z = loc.getZ(); |
|||
float yaw = loc.getYaw(); |
|||
float pitch = loc.getPitch(); |
|||
plugin.getConfig().set("mainLobby", world + ";" + x + ";" + y + ";" + z + ";" + yaw + ";" + pitch); |
|||
plugin.saveConfig(); |
|||
plugin.reloadMainLobby(); |
|||
p.sendMessage("§aLobby has been setted."); |
|||
} |
|||
|
|||
public void reloadLocations() { |
|||
if (plugin.getConfig().getString("stats") != null) { |
|||
stats = getStringLocation("stats"); |
|||
} else { |
|||
stats = null; |
|||
} |
|||
if (plugin.getConfig().getString("tops.normal.kills") != null) { |
|||
nkills = getStringLocation("tops.normal.kills"); |
|||
} else { |
|||
nkills = null; |
|||
} |
|||
if (plugin.getConfig().getString("tops.normal.wins") != null) { |
|||
nwins = getStringLocation("tops.normal.wins"); |
|||
} else { |
|||
nwins = null; |
|||
} |
|||
if (plugin.getConfig().getString("tops.normal.goals") != null) { |
|||
ngoals = getStringLocation("tops.normal.goals"); |
|||
} else { |
|||
ngoals = null; |
|||
} |
|||
if (plugin.getConfig().getString("tops.four.kills") != null) { |
|||
fkills = getStringLocation("tops.four.kills"); |
|||
} else { |
|||
fkills = null; |
|||
} |
|||
if (plugin.getConfig().getString("tops.four.wins") != null) { |
|||
fwins = getStringLocation("tops.four.wins"); |
|||
} else { |
|||
fwins = null; |
|||
} |
|||
if (plugin.getConfig().getString("tops.four.goals") != null) { |
|||
fgoals = getStringLocation("tops.four.goals"); |
|||
} else { |
|||
fgoals = null; |
|||
} |
|||
} |
|||
|
|||
public Location getMainLobby() { |
|||
String location = plugin.getConfig().getString("mainLobby"); |
|||
String [] loca = location.split(";"); |
|||
Location loc = new Location(Bukkit.getWorld(loca[0]), Double.valueOf(loca[1]), Double.valueOf(loca[2]), Double.valueOf(loca[3]), Float.valueOf(loca[4]), Float.valueOf(loca[5])); |
|||
return loc; |
|||
} |
|||
|
|||
public Location getStringLocation(String l) { |
|||
String location = plugin.getConfig().getString(l); |
|||
String [] loca = location.split(";"); |
|||
Location loc = new Location(Bukkit.getWorld(loca[0]), Double.valueOf(loca[1]), Double.valueOf(loca[2]), Double.valueOf(loca[3]), Float.valueOf(loca[4]), Float.valueOf(loca[5])); |
|||
return loc; |
|||
} |
|||
|
|||
public String getLocationString(Location loc){ |
|||
String world = loc.getWorld().getName(); |
|||
double x = loc.getX(); |
|||
double y = loc.getY(); |
|||
double z = loc.getZ(); |
|||
float yaw = loc.getYaw(); |
|||
float pitch = loc.getPitch(); |
|||
return world + ";" + x + ";" + y + ";" + z + ";" + yaw + ";" + pitch; |
|||
} |
|||
|
|||
public Location getStats() { |
|||
return stats; |
|||
} |
|||
|
|||
public Location getNormalKills() { |
|||
return nkills; |
|||
} |
|||
|
|||
public Location getNormalWins() { |
|||
return nwins; |
|||
} |
|||
|
|||
public Location getNormalGoals() { |
|||
return ngoals; |
|||
} |
|||
|
|||
public Location getFourKills() { |
|||
return fkills; |
|||
} |
|||
|
|||
public Location getFourWins() { |
|||
return fwins; |
|||
} |
|||
|
|||
public Location getFourGoals() { |
|||
return fgoals; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,288 @@ |
|||
package cx.sfy.TheBridge.managers; |
|||
|
|||
import java.text.SimpleDateFormat; |
|||
import java.util.Date; |
|||
import java.util.HashMap; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.ChatColor; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.scoreboard.DisplaySlot; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.game.Game; |
|||
import cx.sfy.TheBridge.game.GameFour; |
|||
import cx.sfy.TheBridge.game.Game.State; |
|||
import cx.sfy.TheBridge.game.GameFour.FState; |
|||
import cx.sfy.TheBridge.utils.ScoreboardUtil; |
|||
import me.clip.placeholderapi.PlaceholderAPI; |
|||
|
|||
public class ScoreboardManager { |
|||
|
|||
private HashMap<Player, String> sb = new HashMap<Player, String>(); |
|||
private HashMap<Player, ScoreboardUtil> score = new HashMap<Player, ScoreboardUtil>(); |
|||
Main plugin; |
|||
|
|||
public ScoreboardManager(Main plugin) { |
|||
this.plugin = plugin; |
|||
} |
|||
|
|||
public HashMap<Player, String> getSB(){ |
|||
return sb; |
|||
} |
|||
|
|||
public void createLobbyBoard(Player p) { |
|||
sb.put(p, "lobby"); |
|||
p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR); |
|||
ScoreboardUtil scoreboardUtil = new ScoreboardUtil("all", "starting", false); |
|||
scoreboardUtil.setName(plugin.getLang().get("scoreboards.main-title")); |
|||
String titulo = plugin.getLang().get(p, "scoreboards.main"); |
|||
String [] title = titulo.split("\\n"); |
|||
for (Integer n = 1, n2 = title.length - 1; n < title.length + 1; ++n, --n2) { |
|||
scoreboardUtil.lines(n, lobby(p, title[n2])); |
|||
} |
|||
scoreboardUtil.build(p); |
|||
score.put(p, scoreboardUtil); |
|||
} |
|||
|
|||
public void createWaitingBoard(Player p) { |
|||
sb.put(p, "waiting"); |
|||
Game game = plugin.getGM().getGameByPlayer(p); |
|||
p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR); |
|||
ScoreboardUtil scoreboardUtil = new ScoreboardUtil("lobby", "starting", false); |
|||
scoreboardUtil.setName(plugin.getLang().get("scoreboards.lobby-title")); |
|||
String titulo = plugin.getLang().get(p, "scoreboards.lobby"); |
|||
String [] title = titulo.split("\\n"); |
|||
for (Integer n = 1, n2 = title.length - 1; n < title.length + 1; ++n, --n2) { |
|||
scoreboardUtil.lines(n, game(p, title[n2], game)); |
|||
} |
|||
scoreboardUtil.build(p); |
|||
score.put(p, scoreboardUtil); |
|||
} |
|||
|
|||
public void createStartingBoard(Player p) { |
|||
sb.put(p, "starting"); |
|||
Game game = plugin.getGM().getGameByPlayer(p); |
|||
p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR); |
|||
ScoreboardUtil scoreboardUtil = new ScoreboardUtil("starting", "starting", false); |
|||
scoreboardUtil.setName(plugin.getLang().get("scoreboards.starting-title")); |
|||
String titulo = plugin.getLang().get(p, "scoreboards.starting"); |
|||
String [] title = titulo.split("\\n"); |
|||
for (Integer n = 1, n2 = title.length - 1; n < title.length + 1; ++n, --n2) { |
|||
scoreboardUtil.lines(n, game(p, title[n2], game)); |
|||
} |
|||
scoreboardUtil.build(p); |
|||
score.put(p, scoreboardUtil); |
|||
} |
|||
|
|||
public void createGameBoard(Player p) { |
|||
sb.put(p, "game"); |
|||
Game game = plugin.getGM().getGameByPlayer(p); |
|||
p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR); |
|||
ScoreboardUtil scoreboardUtil = new ScoreboardUtil("game-normal", "starting", false); |
|||
scoreboardUtil.setName(plugin.getLang().get("scoreboards.game-normal-title")); |
|||
String titulo = plugin.getLang().get(p, "scoreboards.game-normal"); |
|||
String [] title = titulo.split("\\n"); |
|||
for (Integer n = 1, n2 = title.length - 1; n < title.length + 1; ++n, --n2) { |
|||
scoreboardUtil.lines(n, game(p, title[n2], game)); |
|||
} |
|||
scoreboardUtil.build(p); |
|||
score.put(p, scoreboardUtil); |
|||
} |
|||
|
|||
public void createWaitingFourBoard(Player p) { |
|||
sb.put(p, "waiting"); |
|||
GameFour game = plugin.getGM().getGameFourByPlayer(p); |
|||
p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR); |
|||
ScoreboardUtil scoreboardUtil = new ScoreboardUtil("lobby", "starting", false); |
|||
scoreboardUtil.setName(plugin.getLang().get("scoreboards.lobby-title")); |
|||
String titulo = plugin.getLang().get(p, "scoreboards.lobby"); |
|||
String [] title = titulo.split("\\n"); |
|||
for (Integer n = 1, n2 = title.length - 1; n < title.length + 1; ++n, --n2) { |
|||
scoreboardUtil.lines(n, gameFour(p, title[n2], game)); |
|||
} |
|||
scoreboardUtil.build(p); |
|||
score.put(p, scoreboardUtil); |
|||
} |
|||
|
|||
public void createStartingFourBoard(Player p) { |
|||
sb.put(p, "starting"); |
|||
GameFour game = plugin.getGM().getGameFourByPlayer(p); |
|||
p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR); |
|||
ScoreboardUtil scoreboardUtil = new ScoreboardUtil("starting", "starting", false); |
|||
scoreboardUtil.setName(plugin.getLang().get("scoreboards.starting-title")); |
|||
String titulo = plugin.getLang().get(p, "scoreboards.starting"); |
|||
String [] title = titulo.split("\\n"); |
|||
for (Integer n = 1, n2 = title.length - 1; n < title.length + 1; ++n, --n2) { |
|||
scoreboardUtil.lines(n, gameFour(p, title[n2], game)); |
|||
} |
|||
scoreboardUtil.build(p); |
|||
score.put(p, scoreboardUtil); |
|||
} |
|||
|
|||
public void createGameFourBoard(Player p) { |
|||
sb.put(p, "game"); |
|||
GameFour game = plugin.getGM().getGameFourByPlayer(p); |
|||
p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR); |
|||
ScoreboardUtil scoreboardUtil = new ScoreboardUtil("game-four", "starting", false); |
|||
scoreboardUtil.setName(plugin.getLang().get("scoreboards.game-four-title")); |
|||
String titulo = plugin.getLang().get(p, "scoreboards.game-four"); |
|||
String [] title = titulo.split("\\n"); |
|||
for (Integer n = 1, n2 = title.length - 1; n < title.length + 1; ++n, --n2) { |
|||
scoreboardUtil.lines(n, gameFour(p, title[n2], game)); |
|||
} |
|||
scoreboardUtil.build(p); |
|||
score.put(p, scoreboardUtil); |
|||
} |
|||
|
|||
public void update(Player p) { |
|||
if (p == null || !p.isOnline()) { |
|||
return; |
|||
} |
|||
ScoreboardUtil scoreboardUtil = score.get(p); |
|||
if (plugin.getGM().getGameByPlayer(p) == null && plugin.getGM().getGameFourByPlayer(p) == null) { |
|||
if (sb.get(p).equals("lobby")) { |
|||
scoreboardUtil.setName(plugin.getLang().get("scoreboards.main-title")); |
|||
String titulo = plugin.getLang().get(p, "scoreboards.main"); |
|||
String [] title = titulo.split("\\n"); |
|||
for (Integer n = 1, n2 = title.length - 1; n < title.length + 1; ++n, --n2) { |
|||
scoreboardUtil.lines(n, lobby(p, title[n2])); |
|||
} |
|||
} else { |
|||
createLobbyBoard(p); |
|||
} |
|||
} else { |
|||
if (plugin.getGM().getGameByPlayer(p) != null) { |
|||
Game game = plugin.getGM().getGameByPlayer(p); |
|||
if (game.isState(State.WAITING)) { |
|||
if (sb.get(p).equals("waiting")) { |
|||
scoreboardUtil.setName(plugin.getLang().get("scoreboards.lobby-title")); |
|||
String titulo = plugin.getLang().get(p, "scoreboards.lobby"); |
|||
String [] title = titulo.split("\\n"); |
|||
for (Integer n = 1, n2 = title.length - 1; n < title.length + 1; ++n, --n2) { |
|||
scoreboardUtil.lines(n, game(p, title[n2], game)); |
|||
} |
|||
} else { |
|||
createWaitingBoard(p); |
|||
} |
|||
} else if (game.isState(State.STARTING)) { |
|||
if (sb.get(p).equals("starting")) { |
|||
scoreboardUtil.setName(plugin.getLang().get("scoreboards.starting-title")); |
|||
String titulo = plugin.getLang().get(p, "scoreboards.starting"); |
|||
String [] title = titulo.split("\\n"); |
|||
for (Integer n = 1, n2 = title.length - 1; n < title.length + 1; ++n, --n2) { |
|||
scoreboardUtil.lines(n, game(p, title[n2], game)); |
|||
} |
|||
} else { |
|||
createStartingBoard(p); |
|||
} |
|||
} else if (game.isState(State.INGAME) || game.isState(State.PREGAME) || game.isState(State.FINISH) || game.isState(State.RESTARTING)) { |
|||
if (sb.get(p).equals("game")) { |
|||
scoreboardUtil.setName(plugin.getLang().get("scoreboards.game-normal-title")); |
|||
String titulo = plugin.getLang().get(p, "scoreboards.game-normal"); |
|||
String [] title = titulo.split("\\n"); |
|||
for (Integer n = 1, n2 = title.length - 1; n < title.length + 1; ++n, --n2) { |
|||
scoreboardUtil.lines(n, game(p, title[n2], game)); |
|||
} |
|||
} else { |
|||
createGameBoard(p); |
|||
} |
|||
} |
|||
} else if (plugin.getGM().getGameFourByPlayer(p) != null) { |
|||
GameFour game = plugin.getGM().getGameFourByPlayer(p); |
|||
if (game.isState(FState.WAITING)) { |
|||
if (sb.get(p).equals("waiting")) { |
|||
scoreboardUtil.setName(plugin.getLang().get("scoreboards.lobby-title")); |
|||
String titulo = plugin.getLang().get(p, "scoreboards.lobby"); |
|||
String [] title = titulo.split("\\n"); |
|||
for (Integer n = 1, n2 = title.length - 1; n < title.length + 1; ++n, --n2) { |
|||
scoreboardUtil.lines(n, gameFour(p, title[n2], game)); |
|||
} |
|||
} else { |
|||
createWaitingFourBoard(p); |
|||
} |
|||
} else if (game.isState(FState.STARTING)) { |
|||
if (sb.get(p).equals("starting")) { |
|||
scoreboardUtil.setName(plugin.getLang().get("scoreboards.starting-title")); |
|||
String titulo = plugin.getLang().get(p, "scoreboards.starting"); |
|||
String [] title = titulo.split("\\n"); |
|||
for (Integer n = 1, n2 = title.length - 1; n < title.length + 1; ++n, --n2) { |
|||
scoreboardUtil.lines(n, gameFour(p, title[n2], game)); |
|||
} |
|||
} else { |
|||
createStartingFourBoard(p); |
|||
} |
|||
} else if (game.isState(FState.INGAME) || game.isState(FState.PREGAME) || game.isState(FState.FINISH) || game.isState(FState.RESTARTING)) { |
|||
if (sb.get(p).equals("game")) { |
|||
scoreboardUtil.setName(plugin.getLang().get("scoreboards.game-four-title")); |
|||
String titulo = plugin.getLang().get(p, "scoreboards.game-four"); |
|||
String [] title = titulo.split("\\n"); |
|||
for (Integer n = 1, n2 = title.length - 1; n < title.length + 1; ++n, --n2) { |
|||
scoreboardUtil.lines(n, gameFour(p, title[n2], game)); |
|||
} |
|||
} else { |
|||
createGameFourBoard(p); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
Date now = new Date(); |
|||
SimpleDateFormat sm = new SimpleDateFormat("dd/MM/yy"); |
|||
|
|||
public String lobby(Player p, String c) { |
|||
if (plugin.getPlaceholder()) { |
|||
return PlaceholderAPI.setPlaceholders(p, c.replaceAll("<online>", String.valueOf(Bukkit.getOnlinePlayers().size())).replaceAll("<player>", p.getName())); |
|||
} else { |
|||
return c.replaceAll("<online>", String.valueOf(Bukkit.getOnlinePlayers().size())).replaceAll("<player>", p.getName()); |
|||
} |
|||
} |
|||
|
|||
public String game(Player p, String c, Game game) { |
|||
if (plugin.getPlaceholder()) { |
|||
return PlaceholderAPI.setPlaceholders(p, c |
|||
.replaceAll("<goals>", String.valueOf(game.getGoals(p))) |
|||
.replaceAll("<kills>", String.valueOf(game.getKills(p))) |
|||
.replaceAll("<date>", sm.format(now)) |
|||
.replaceAll("<blueGoals>", String.valueOf(game.getTeams().get(ChatColor.BLUE).getGoals())) |
|||
.replaceAll("<redGoals>", String.valueOf(game.getTeams().get(ChatColor.RED).getGoals())) |
|||
.replaceAll("<time>", String.valueOf(game.getStarting())).replaceAll("<s>", (game.getStarting() > 1) ? "s" : "").replaceAll("<max>", String.valueOf(game.getMax())).replaceAll("<players>", String.valueOf(game.getPlayers())).replaceAll("<map>", game.getName()).replaceAll("<mode>", game.getMode()).replaceAll("<server>", plugin.getConfig().getString("server"))); |
|||
} else { |
|||
return c.replaceAll("<goals>", String.valueOf(game.getGoals(p))) |
|||
.replaceAll("<kills>", String.valueOf(game.getKills(p))) |
|||
.replaceAll("<date>", sm.format(now)) |
|||
.replaceAll("<blueGoals>", String.valueOf(game.getTeams().get(ChatColor.BLUE).getGoals())) |
|||
.replaceAll("<redGoals>", String.valueOf(game.getTeams().get(ChatColor.RED).getGoals())) |
|||
.replaceAll("<time>", String.valueOf(game.getStarting())).replaceAll("<max>", String.valueOf(game.getMax())).replaceAll("<players>", String.valueOf(game.getPlayers())).replaceAll("<map>", game.getName()).replaceAll("<mode>", game.getMode()).replaceAll("<server>", plugin.getConfig().getString("server")); |
|||
} |
|||
} |
|||
|
|||
public String gameFour(Player p, String c, GameFour game) { |
|||
if (plugin.getPlaceholder()) { |
|||
return PlaceholderAPI.setPlaceholders(p, c.replaceAll("<red>", game.getTeams().get(ChatColor.RED).getAlly()) |
|||
.replaceAll("<redLife>", game.getTeams().get(ChatColor.RED).getLifeString()) |
|||
.replaceAll("<blue>", game.getTeams().get(ChatColor.BLUE).getAlly()) |
|||
.replaceAll("<blueLife>", game.getTeams().get(ChatColor.BLUE).getLifeString()) |
|||
.replaceAll("<yellow>", game.getTeams().get(ChatColor.YELLOW).getAlly()) |
|||
.replaceAll("<yellowLife>", game.getTeams().get(ChatColor.YELLOW).getLifeString()) |
|||
.replaceAll("<green>", game.getTeams().get(ChatColor.GREEN).getAlly()) |
|||
.replaceAll("<greenLife>", game.getTeams().get(ChatColor.GREEN).getLifeString()) |
|||
.replaceAll("<goals>", String.valueOf(game.getGoals(p))).replaceAll("<kills>", String.valueOf(game.getKills(p))).replaceAll("<date>", sm.format(now)).replaceAll("<server>", plugin.getConfig().getString("server")).replaceAll("<players>", String.valueOf(game.getPlayers().size())).replaceAll("<max>", String.valueOf(game.getMax())).replaceAll("<mode>", game.getMode()).replaceAll("<map>", game.getName()).replaceAll("<time>", String.valueOf(game.getStarting())).replaceAll("<s>", (game.getStarting() > 1) ? "s" : "")); |
|||
} |
|||
return c.replaceAll("<red>", game.getTeams().get(ChatColor.RED).getAlly()) |
|||
.replaceAll("<redLife>", game.getTeams().get(ChatColor.RED).getLifeString()) |
|||
.replaceAll("<blue>", game.getTeams().get(ChatColor.BLUE).getAlly()) |
|||
.replaceAll("<blueLife>", game.getTeams().get(ChatColor.BLUE).getLifeString()) |
|||
.replaceAll("<yellow>", game.getTeams().get(ChatColor.YELLOW).getAlly()) |
|||
.replaceAll("<yellowLife>", game.getTeams().get(ChatColor.YELLOW).getLifeString()) |
|||
.replaceAll("<green>", game.getTeams().get(ChatColor.GREEN).getAlly()) |
|||
.replaceAll("<greenLife>", game.getTeams().get(ChatColor.GREEN).getLifeString()) |
|||
.replaceAll("<goals>", String.valueOf(game.getGoals(p))).replaceAll("<kills>", String.valueOf(game.getKills(p))).replaceAll("<date>", sm.format(now)).replaceAll("<server>", plugin.getConfig().getString("server")).replaceAll("<players>", String.valueOf(game.getPlayers().size())).replaceAll("<max>", String.valueOf(game.getMax())).replaceAll("<mode>", game.getMode()).replaceAll("<map>", game.getName()).replaceAll("<time>", String.valueOf(game.getStarting())).replaceAll("<s>", (game.getStarting() > 1) ? "s" : ""); |
|||
} |
|||
|
|||
public void remove(Player p) { |
|||
sb.remove(p); |
|||
score.remove(p); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,45 @@ |
|||
package cx.sfy.TheBridge.managers; |
|||
|
|||
import java.util.HashMap; |
|||
|
|||
import org.bukkit.Location; |
|||
import org.bukkit.entity.Player; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
|
|||
public class SetupManager { |
|||
|
|||
private HashMap<Player, HashMap<String, Location>> build = new HashMap<Player, HashMap<String, Location>>(); |
|||
Main plugin; |
|||
|
|||
public SetupManager(Main plugin) { |
|||
this.plugin = plugin; |
|||
} |
|||
|
|||
public void setMin(Player p, Location loc) { |
|||
if (!build.containsKey(p)) { |
|||
build.put(p, new HashMap<String, Location>()); |
|||
build.get(p).put("MIN", loc); |
|||
p.sendMessage(plugin.getLang().get("setup.minSet").replaceAll("<world>", loc.getWorld().getName()).replaceAll("<x>", String.valueOf(loc.getY())).replaceAll("<y>", String.valueOf(loc.getY())).replaceAll("<z>", String.valueOf(loc.getZ())).replaceAll("<yaw>", String.valueOf(loc.getYaw())).replaceAll("<pitch>", String.valueOf(loc.getPitch()))); |
|||
} else { |
|||
build.get(p).put("MIN", loc); |
|||
p.sendMessage(plugin.getLang().get("setup.minSet").replaceAll("<world>", loc.getWorld().getName()).replaceAll("<x>", String.valueOf(loc.getY())).replaceAll("<y>", String.valueOf(loc.getY())).replaceAll("<z>", String.valueOf(loc.getZ())).replaceAll("<yaw>", String.valueOf(loc.getYaw())).replaceAll("<pitch>", String.valueOf(loc.getPitch()))); |
|||
} |
|||
} |
|||
|
|||
public void setMax(Player p, Location loc) { |
|||
if (!build.containsKey(p)) { |
|||
build.put(p, new HashMap<String, Location>()); |
|||
build.get(p).put("MAX", loc); |
|||
p.sendMessage(plugin.getLang().get("setup.maxSet").replaceAll("<world>", loc.getWorld().getName()).replaceAll("<x>", String.valueOf(loc.getY())).replaceAll("<y>", String.valueOf(loc.getY())).replaceAll("<z>", String.valueOf(loc.getZ())).replaceAll("<yaw>", String.valueOf(loc.getYaw())).replaceAll("<pitch>", String.valueOf(loc.getPitch()))); |
|||
} else { |
|||
build.get(p).put("MAX", loc); |
|||
p.sendMessage(plugin.getLang().get("setup.maxSet").replaceAll("<world>", loc.getWorld().getName()).replaceAll("<x>", String.valueOf(loc.getY())).replaceAll("<y>", String.valueOf(loc.getY())).replaceAll("<z>", String.valueOf(loc.getZ())).replaceAll("<yaw>", String.valueOf(loc.getYaw())).replaceAll("<pitch>", String.valueOf(loc.getPitch()))); |
|||
} |
|||
} |
|||
|
|||
public HashMap<Player, HashMap<String, Location>> getSelect(){ |
|||
return build; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,202 @@ |
|||
package cx.sfy.TheBridge.managers; |
|||
|
|||
import java.util.HashMap; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.Location; |
|||
import org.bukkit.block.Block; |
|||
import org.bukkit.block.BlockFace; |
|||
import org.bukkit.block.Sign; |
|||
import org.bukkit.configuration.ConfigurationSection; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.game.Game; |
|||
import cx.sfy.TheBridge.game.Game.State; |
|||
import cx.sfy.TheBridge.game.GameFour; |
|||
import cx.sfy.TheBridge.game.GameFour.FState; |
|||
import cx.sfy.TheBridge.signs.GameFourSign; |
|||
import cx.sfy.TheBridge.signs.GameNormalSign; |
|||
|
|||
public class SignManager { |
|||
|
|||
private final HashMap<Location, GameNormalSign> gameSign = new HashMap<>(); |
|||
private final HashMap<Location, GameFourSign> gameFourSign = new HashMap<>(); |
|||
Main plugin; |
|||
|
|||
public SignManager(Main plugin) { |
|||
this.plugin = plugin; |
|||
final ConfigurationSection conf = plugin.getSigns().getConfig().getConfigurationSection("signs.normal"); |
|||
for (final String signN : conf.getKeys(false)) { |
|||
final Location loc = getStringLocation(plugin.getSigns().get("signs.normal." + signN + ".loc")); |
|||
if (!(loc.getBlock().getState() instanceof Sign)) |
|||
continue; |
|||
final Block b = getBlockFaced(loc.getBlock()); |
|||
gameSign.put(loc, new GameNormalSign(loc, signN, b)); |
|||
} |
|||
final ConfigurationSection confF = plugin.getSigns().getConfig().getConfigurationSection("signs.four"); |
|||
for (final String signF : confF.getKeys(false)) { |
|||
final Location loc = getStringLocation(plugin.getSigns().get("signs.four." + signF + ".loc")); |
|||
if (!(loc.getBlock().getState() instanceof Sign)) |
|||
continue; |
|||
final Block b = getBlockFaced(loc.getBlock()); |
|||
gameFourSign.put(loc, new GameFourSign(loc, signF, b)); |
|||
} |
|||
} |
|||
|
|||
public HashMap<Location, GameNormalSign> getSigns(){ |
|||
return gameSign; |
|||
} |
|||
|
|||
public HashMap<Location, GameFourSign> getFourSigns(){ |
|||
return gameFourSign; |
|||
} |
|||
|
|||
@SuppressWarnings("deprecation") |
|||
public Block getBlockFaced(Block b) { |
|||
switch (b.getData()) { |
|||
case 2: |
|||
return b.getRelative(BlockFace.SOUTH); |
|||
case 3: |
|||
return b.getRelative(BlockFace.NORTH); |
|||
case 4: |
|||
return b.getRelative(BlockFace.EAST); |
|||
case 5: |
|||
return b.getRelative(BlockFace.WEST); |
|||
default: |
|||
return b; |
|||
} |
|||
} |
|||
|
|||
public void createSign(Location loc, String game, Sign sign) { |
|||
plugin.getSigns().set("signs.normal." + game + ".loc", getLocationString(loc)); |
|||
plugin.getSigns().set("signs.normal." + game + ".game", game); |
|||
gameSign.put(loc, new GameNormalSign(loc, game, getBlockFaced(loc.getBlock()))); |
|||
final Game gname = plugin.getGM().getGameByName(game); |
|||
sign.setLine(0, plugin.getLang().get("signs.normal.line-1").replaceAll("<state>", getState(gname.getState())).replaceAll("<name>", game).replaceAll("<players>", String.valueOf(gname.getPlayers())).replaceAll("<max>", String.valueOf(gname.getMax()))); |
|||
sign.setLine(1, plugin.getLang().get("signs.normal.line-2").replaceAll("<state>", getState(gname.getState())).replaceAll("<name>", game).replaceAll("<players>", String.valueOf(gname.getPlayers())).replaceAll("<max>", String.valueOf(gname.getMax()))); |
|||
sign.setLine(2, plugin.getLang().get("signs.normal.line-3").replaceAll("<state>", getState(gname.getState())).replaceAll("<name>", game).replaceAll("<players>", String.valueOf(gname.getPlayers())).replaceAll("<max>", String.valueOf(gname.getMax()))); |
|||
sign.setLine(3, plugin.getLang().get("signs.normal.line-4").replaceAll("<state>", getState(gname.getState())).replaceAll("<name>", game).replaceAll("<players>", String.valueOf(gname.getPlayers())).replaceAll("<max>", String.valueOf(gname.getMax()))); |
|||
sign.update(true); |
|||
plugin.getSigns().save(); |
|||
} |
|||
|
|||
public void createFourSign(Location loc, String game, Sign sign) { |
|||
plugin.getSigns().set("signs.four." + game + ".loc", getLocationString(loc)); |
|||
plugin.getSigns().set("signs.four." + game + ".game", game); |
|||
gameFourSign.put(loc, new GameFourSign(loc, game, getBlockFaced(loc.getBlock()))); |
|||
final GameFour gname = plugin.getGM().getGameFourByName(game); |
|||
sign.setLine(0, plugin.getLang().get("signs.four.line-1").replaceAll("<state>", getState(gname.getState())).replaceAll("<name>", game).replaceAll("<players>", String.valueOf(gname.getPlayers().size())).replaceAll("<max>", String.valueOf(gname.getMax()))); |
|||
sign.setLine(1, plugin.getLang().get("signs.four.line-2").replaceAll("<state>", getState(gname.getState())).replaceAll("<name>", game).replaceAll("<players>", String.valueOf(gname.getPlayers().size())).replaceAll("<max>", String.valueOf(gname.getMax()))); |
|||
sign.setLine(2, plugin.getLang().get("signs.four.line-3").replaceAll("<state>", getState(gname.getState())).replaceAll("<name>", game).replaceAll("<players>", String.valueOf(gname.getPlayers().size())).replaceAll("<max>", String.valueOf(gname.getMax()))); |
|||
sign.setLine(3, plugin.getLang().get("signs.four.line-4").replaceAll("<state>", getState(gname.getState())).replaceAll("<name>", game).replaceAll("<players>", String.valueOf(gname.getPlayers().size())).replaceAll("<max>", String.valueOf(gname.getMax()))); |
|||
sign.update(true); |
|||
plugin.getSigns().save(); |
|||
} |
|||
|
|||
public void updateGameSign(Game game) { |
|||
for (final GameNormalSign sig : gameSign.values()) |
|||
if (sig.getGame().equals(game.getName())) { |
|||
final Sign sign = sig.getSign(); |
|||
sign.setLine(0, plugin.getLang().get("signs.normal.line-1").replaceAll("<state>", getState(game.getState())).replaceAll("<name>", game.getName()).replaceAll("<players>", String.valueOf(game.getPlayers())).replaceAll("<max>", String.valueOf(game.getMax()))); |
|||
sign.setLine(1, plugin.getLang().get("signs.normal.line-2").replaceAll("<state>", getState(game.getState())).replaceAll("<name>", game.getName()).replaceAll("<players>", String.valueOf(game.getPlayers())).replaceAll("<max>", String.valueOf(game.getMax()))); |
|||
sign.setLine(2, plugin.getLang().get("signs.normal.line-3").replaceAll("<state>", getState(game.getState())).replaceAll("<name>", game.getName()).replaceAll("<players>", String.valueOf(game.getPlayers())).replaceAll("<max>", String.valueOf(game.getMax()))); |
|||
sign.setLine(3, plugin.getLang().get("signs.normal.line-4").replaceAll("<state>", getState(game.getState())).replaceAll("<name>", game.getName()).replaceAll("<players>", String.valueOf(game.getPlayers())).replaceAll("<max>", String.valueOf(game.getMax()))); |
|||
sign.update(); |
|||
updateBlock(game, sig.getRetract()); |
|||
} |
|||
} |
|||
|
|||
public void updateGameFourSign(GameFour game) { |
|||
for (final GameFourSign sig : gameFourSign.values()) |
|||
if (sig.getGame().equals(game.getName())) { |
|||
final Sign sign = sig.getSign(); |
|||
sign.setLine(0, plugin.getLang().get("signs.four.line-1").replaceAll("<state>", getState(game.getState())).replaceAll("<name>", game.getName()).replaceAll("<players>", String.valueOf(game.getPlayers().size())).replaceAll("<max>", String.valueOf(game.getMax()))); |
|||
sign.setLine(1, plugin.getLang().get("signs.four.line-2").replaceAll("<state>", getState(game.getState())).replaceAll("<name>", game.getName()).replaceAll("<players>", String.valueOf(game.getPlayers().size())).replaceAll("<max>", String.valueOf(game.getMax()))); |
|||
sign.setLine(2, plugin.getLang().get("signs.four.line-3").replaceAll("<state>", getState(game.getState())).replaceAll("<name>", game.getName()).replaceAll("<players>", String.valueOf(game.getPlayers().size())).replaceAll("<max>", String.valueOf(game.getMax()))); |
|||
sign.setLine(3, plugin.getLang().get("signs.four.line-4").replaceAll("<state>", getState(game.getState())).replaceAll("<name>", game.getName()).replaceAll("<players>", String.valueOf(game.getPlayers().size())).replaceAll("<max>", String.valueOf(game.getMax()))); |
|||
sign.update(); |
|||
updateBlock(game, sig.getRetract()); |
|||
} |
|||
} |
|||
|
|||
public Location getStringLocation(String location) { |
|||
final String [] loca = location.split(";"); |
|||
final Location loc = new Location(Bukkit.getWorld(loca[0]), Double.valueOf(loca[1]), Double.valueOf(loca[2]), Double.valueOf(loca[3]), Float.valueOf(loca[4]), Float.valueOf(loca[5])); |
|||
return loc; |
|||
} |
|||
|
|||
@SuppressWarnings("deprecation") |
|||
public void updateBlock(Game game, Block b) { |
|||
if (game.isState(State.WAITING)) |
|||
b.setData((byte)plugin.getConfig().getInt("signs.waiting")); |
|||
if (game.isState(State.STARTING)) |
|||
b.setData((byte)plugin.getConfig().getInt("signs.starting")); |
|||
if (game.isState(State.PREGAME)) |
|||
b.setData((byte)plugin.getConfig().getInt("signs.ingame")); |
|||
if (game.isState(State.INGAME)) |
|||
b.setData((byte)plugin.getConfig().getInt("signs.ingame")); |
|||
if (game.isState(State.FINISH)) |
|||
b.setData((byte)plugin.getConfig().getInt("signs.full")); |
|||
if (game.isState(State.RESTARTING)) |
|||
b.setData((byte)plugin.getConfig().getInt("signs.restart")); |
|||
} |
|||
|
|||
@SuppressWarnings("deprecation") |
|||
public void updateBlock(GameFour game, Block b) { |
|||
if (game.isState(FState.WAITING)) |
|||
b.setData((byte)plugin.getConfig().getInt("signs.waiting")); |
|||
if (game.isState(FState.STARTING)) |
|||
b.setData((byte)plugin.getConfig().getInt("signs.starting")); |
|||
if (game.isState(FState.PREGAME)) |
|||
b.setData((byte)plugin.getConfig().getInt("signs.ingame")); |
|||
if (game.isState(FState.INGAME)) |
|||
b.setData((byte)plugin.getConfig().getInt("signs.ingame")); |
|||
if (game.isState(FState.FINISH)) |
|||
b.setData((byte)plugin.getConfig().getInt("signs.full")); |
|||
if (game.isState(FState.RESTARTING)) |
|||
b.setData((byte)plugin.getConfig().getInt("signs.restart")); |
|||
} |
|||
|
|||
protected String getState(FState state) { |
|||
if (state == FState.WAITING) |
|||
return plugin.getLang().get("states.waiting"); |
|||
if (state == FState.STARTING) |
|||
return plugin.getLang().get("states.starting"); |
|||
if (state == FState.PREGAME) |
|||
return plugin.getLang().get("states.pregame"); |
|||
if (state == FState.INGAME) |
|||
return plugin.getLang().get("states.ingame"); |
|||
if (state == FState.FINISH) |
|||
return plugin.getLang().get("states.finish"); |
|||
if (state == FState.RESTARTING) |
|||
return plugin.getLang().get("states.restarting"); |
|||
return ""; |
|||
} |
|||
|
|||
protected String getState(State state) { |
|||
if (state == State.WAITING) |
|||
return plugin.getLang().get("states.waiting"); |
|||
if (state == State.STARTING) |
|||
return plugin.getLang().get("states.starting"); |
|||
if (state == State.PREGAME) |
|||
return plugin.getLang().get("states.pregame"); |
|||
if (state == State.INGAME) |
|||
return plugin.getLang().get("states.ingame"); |
|||
if (state == State.FINISH) |
|||
return plugin.getLang().get("states.finish"); |
|||
if (state == State.RESTARTING) |
|||
return plugin.getLang().get("states.restarting"); |
|||
return ""; |
|||
} |
|||
|
|||
public String getLocationString(Location loc){ |
|||
final String world = loc.getWorld().getName(); |
|||
final double x = loc.getX(); |
|||
final double y = loc.getY(); |
|||
final double z = loc.getZ(); |
|||
final float yaw = loc.getYaw(); |
|||
final float pitch = loc.getPitch(); |
|||
return world + ";" + x + ";" + y + ";" + z + ";" + yaw + ";" + pitch; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,73 @@ |
|||
package cx.sfy.TheBridge.managers; |
|||
|
|||
import org.bukkit.ChatColor; |
|||
import org.bukkit.entity.Player; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
|
|||
public class TitleManager { |
|||
|
|||
Main plugin; |
|||
private final String preTitle; |
|||
private final String preSubTitle; |
|||
private final String startTitle; |
|||
private final String startSubTitle; |
|||
private final String restartTitle; |
|||
private final String restartSubTitle; |
|||
private final int pfadein; |
|||
private final int pstayin; |
|||
private final int pfadeout; |
|||
private final int sfadein; |
|||
private final int sstayin; |
|||
private final int sfadeout; |
|||
private final int rfadein; |
|||
private final int rstayin; |
|||
private final int rfadeout; |
|||
|
|||
public TitleManager(Main plugin) { |
|||
this.plugin = plugin; |
|||
this.preTitle = plugin.getLang().get("titles.prestart.title"); |
|||
this.preSubTitle = plugin.getLang().get("titles.prestart.subtitle"); |
|||
this.pfadein = plugin.getConfig().getInt("title.prestart.fadein"); |
|||
this.pstayin = plugin.getConfig().getInt("title.prestart.stayin"); |
|||
this.pfadeout = plugin.getConfig().getInt("title.prestart.fadeout"); |
|||
this.startTitle = plugin.getLang().get("titles.start.title"); |
|||
this.startSubTitle = plugin.getLang().get("titles.start.subtitle"); |
|||
this.sfadein = plugin.getConfig().getInt("title.start.fadein"); |
|||
this.sstayin = plugin.getConfig().getInt("title.start.stayin"); |
|||
this.sfadeout = plugin.getConfig().getInt("title.start.fadeout"); |
|||
this.restartTitle = plugin.getLang().get("titles.restart.title"); |
|||
this.restartSubTitle = plugin.getLang().get("titles.restart.subtitle"); |
|||
this.rfadein = plugin.getConfig().getInt("title.restart.fadein"); |
|||
this.rstayin = plugin.getConfig().getInt("title.restart.stayin"); |
|||
this.rfadeout = plugin.getConfig().getInt("title.restart.fadeout"); |
|||
} |
|||
|
|||
public void sendPreTitle(Player p, int time, boolean s) { |
|||
if (s) |
|||
plugin.getNMS().sendTitle(p, pfadein, pstayin, pfadeout, preTitle.replaceAll("<none>", "").replaceAll("<time>", String.valueOf(time)).replaceAll("<s>", "s"), preSubTitle.replaceAll("<none>", "").replaceAll("<time>", String.valueOf(time)).replaceAll("<s>", "s")); |
|||
else |
|||
plugin.getNMS().sendTitle(p, pfadein, pstayin, pfadeout, preTitle.replaceAll("<none>", "").replaceAll("<time>", String.valueOf(time)).replaceAll("<s>", ""), preSubTitle.replaceAll("<none>", "").replaceAll("<time>", String.valueOf(time)).replaceAll("<s>", "")); |
|||
} |
|||
|
|||
public void sendStartTitle(Player p, int time, boolean s) { |
|||
if (s) |
|||
plugin.getNMS().sendTitle(p, sfadein, sstayin, sfadeout, startTitle.replaceAll("<none>", "").replaceAll("<time>", getColor(time) + String.valueOf(time)).replaceAll("<s>", "s"), startSubTitle.replaceAll("<none>", "").replaceAll("<time>", getColor(time) + String.valueOf(time)).replaceAll("<s>", "s")); |
|||
else |
|||
plugin.getNMS().sendTitle(p, sfadein, sstayin, sfadeout, startTitle.replaceAll("<none>", "").replaceAll("<time>", getColor(time) + String.valueOf(time)).replaceAll("<s>", ""), startSubTitle.replaceAll("<none>", "").replaceAll("<time>", getColor(time) + String.valueOf(time)).replaceAll("<s>", "")); |
|||
} |
|||
|
|||
public void sendReStartTitle(final Player w, final Player p, final int time, final boolean s) { |
|||
if (s) |
|||
this.plugin.getNMS().sendTitle(p, this.rfadein, this.rstayin, this.rfadeout, this.restartTitle.replaceAll("<color>", new StringBuilder().append(this.plugin.getGM().getGameByPlayer(p).getTeamPlayer(w).getColor()).toString()).replaceAll("<player>", w.getName()).replaceAll("<none>", "").replaceAll("<time>", String.valueOf(time)).replaceAll("<s>", "s"), this.restartSubTitle.replaceAll("<color>", new StringBuilder().append(this.plugin.getGM().getGameByPlayer(p).getTeamPlayer(w).getColor()).toString()).replaceAll("<player>", w.getName()).replaceAll("<none>", "").replaceAll("<time>", String.valueOf(time)).replaceAll("<s>", "s")); |
|||
else |
|||
this.plugin.getNMS().sendTitle(p, this.rfadein, this.rstayin, this.rfadeout, this.restartTitle.replaceAll("<color>", new StringBuilder().append(this.plugin.getGM().getGameByPlayer(p).getTeamPlayer(w).getColor()).toString()).replaceAll("<player>", w.getName()).replaceAll("<none>", "").replaceAll("<time>", String.valueOf(time)).replaceAll("<s>", ""), this.restartSubTitle.replaceAll("<color>", new StringBuilder().append(this.plugin.getGM().getGameByPlayer(p).getTeamPlayer(w).getColor()).toString()).replaceAll("<player>", w.getName()).replaceAll("<none>", "").replaceAll("<time>", String.valueOf(time)).replaceAll("<s>", "")); |
|||
} |
|||
|
|||
private ChatColor getColor(int time) { |
|||
if (time > 10) |
|||
return ChatColor.GREEN; |
|||
return ChatColor.RED; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,251 @@ |
|||
package cx.sfy.TheBridge.managers; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.HashMap; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.ChatColor; |
|||
import org.bukkit.Location; |
|||
import org.bukkit.entity.Player; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.hologram.TruenoHologram; |
|||
import cx.sfy.TheBridge.hologram.TruenoHologramAPI; |
|||
import cx.sfy.TheBridge.tops.BoardType; |
|||
import cx.sfy.TheBridge.tops.Top; |
|||
import me.clip.placeholderapi.PlaceholderAPI; |
|||
|
|||
public class TopManager { |
|||
|
|||
private HashMap<Integer, Top> nkills = new HashMap<Integer, Top>(); |
|||
private HashMap<Integer, Top> nwins = new HashMap<Integer, Top>(); |
|||
private HashMap<Integer, Top> ngoals = new HashMap<Integer, Top>(); |
|||
private HashMap<Integer, Top> fkills = new HashMap<Integer, Top>(); |
|||
private HashMap<Integer, Top> fwins = new HashMap<Integer, Top>(); |
|||
private HashMap<Integer, Top> fgoals = new HashMap<Integer, Top>(); |
|||
private ArrayList<String> nkillslines = new ArrayList<String>(); |
|||
private ArrayList<String> nwinslines = new ArrayList<String>(); |
|||
private ArrayList<String> ngoalslines = new ArrayList<String>(); |
|||
private ArrayList<String> fkillslines = new ArrayList<String>(); |
|||
private ArrayList<String> fwinslines = new ArrayList<String>(); |
|||
private ArrayList<String> fgoalslines = new ArrayList<String>(); |
|||
private HashMap<Player, ArrayList<TruenoHologram>> playerHolo = new HashMap<Player, ArrayList<TruenoHologram>>(); |
|||
private HashMap<BoardType, TruenoHologram> holo = new HashMap<BoardType, TruenoHologram>(); |
|||
Main plugin; |
|||
|
|||
public TopManager(Main plugin) { |
|||
this.plugin = plugin; |
|||
} |
|||
|
|||
|
|||
public void updateTops() { |
|||
plugin.getLM().reloadLocations(); |
|||
nkills.clear(); |
|||
nwins.clear(); |
|||
ngoals.clear(); |
|||
fkills.clear(); |
|||
fwins.clear(); |
|||
fgoals.clear(); |
|||
plugin.getDB().loadNormalKills(); |
|||
plugin.getDB().loadNormalWins(); |
|||
plugin.getDB().loadNormalGoals(); |
|||
plugin.getDB().loadFourKills(); |
|||
plugin.getDB().loadFourWins(); |
|||
plugin.getDB().loadFourGoals(); |
|||
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "Tops Updated"); |
|||
} |
|||
|
|||
public void createInfo(Player p) { |
|||
if (!playerHolo.containsKey(p)) { |
|||
playerHolo.put(p, new ArrayList<TruenoHologram>()); |
|||
} |
|||
removeHolo(p); |
|||
if (plugin.getLM().getStats() != null) { |
|||
ArrayList<String> stats = new ArrayList<String>(); |
|||
Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() { |
|||
@Override |
|||
public void run() { |
|||
for (String msg2 : plugin.getLang().getList("stats")) { |
|||
stats.add(PlaceholderAPI.setPlaceholders(p, ChatColor.translateAlternateColorCodes('&', msg2))); |
|||
} |
|||
TruenoHologram hologram2 = TruenoHologramAPI.getNewHologram(); |
|||
hologram2.setupPlayerHologram(p, plugin.getLM().getStats(), stats); |
|||
hologram2.display(); |
|||
playerHolo.get(p).add(hologram2); |
|||
} |
|||
}, 20L); |
|||
} |
|||
} |
|||
|
|||
public void removeHolo(Player p) { |
|||
for (TruenoHologram holo : playerHolo.get(p)) { |
|||
holo.delete(); |
|||
} |
|||
} |
|||
|
|||
public void removeHolo() { |
|||
for (TruenoHologram holo : holo.values()) { |
|||
holo.delete(); |
|||
} |
|||
} |
|||
|
|||
public void removeHolo(BoardType type) { |
|||
if (holo.containsKey(type)) { |
|||
holo.get(type).delete(); |
|||
} |
|||
} |
|||
|
|||
public void createTop(Location location, BoardType type) { |
|||
if (type.equals(BoardType.NORMAL_KILLS)) { |
|||
removeHolo(type); |
|||
nkillslines.clear(); |
|||
for (String line : plugin.getLang().getList("tops.normal.kills")) { |
|||
if (line.contains("<top>")) { |
|||
for (Top top : nkills.values()) { |
|||
nkillslines.add(ChatColor.YELLOW + "" + ChatColor.BOLD + top.getTop() + ".- " + ChatColor.GRAY + top.getName() + " - " + ChatColor.GOLD + "" + top.getAmount()); |
|||
} |
|||
} else { |
|||
nkillslines.add(ChatColor.translateAlternateColorCodes('&', line)); |
|||
} |
|||
} |
|||
TruenoHologram hologram = TruenoHologramAPI.getNewHologram(); |
|||
hologram.setDistanceBetweenLines(0.35); |
|||
hologram.setupWorldHologram(location, nkillslines); |
|||
hologram.display(); |
|||
holo.put(type, hologram); |
|||
} |
|||
if (type.equals(BoardType.NORMAL_WINS)) { |
|||
removeHolo(type); |
|||
nwinslines.clear(); |
|||
for (String line : plugin.getLang().getList("tops.normal.wins")) { |
|||
if (line.contains("<top>")) { |
|||
for (Top top : nwins.values()) { |
|||
nwinslines.add(ChatColor.YELLOW + "" + ChatColor.BOLD + top.getTop() + ".- " + ChatColor.GRAY + top.getName() + " - " + ChatColor.GOLD + "" + top.getAmount()); |
|||
} |
|||
} else { |
|||
nwinslines.add(ChatColor.translateAlternateColorCodes('&', line)); |
|||
} |
|||
} |
|||
TruenoHologram hologram = TruenoHologramAPI.getNewHologram(); |
|||
hologram.setDistanceBetweenLines(0.35); |
|||
hologram.setupWorldHologram(location, nwinslines); |
|||
hologram.display(); |
|||
holo.put(type, hologram); |
|||
} |
|||
if (type.equals(BoardType.NORMAL_GOALS)) { |
|||
removeHolo(type); |
|||
ngoalslines.clear(); |
|||
for (String line : plugin.getLang().getList("tops.normal.goals")) { |
|||
if (line.contains("<top>")) { |
|||
for (Top top : ngoals.values()) { |
|||
ngoalslines.add(ChatColor.YELLOW + "" + ChatColor.BOLD + top.getTop() + ".- " + ChatColor.GRAY + top.getName() + " - " + ChatColor.GOLD + "" + top.getAmount()); |
|||
} |
|||
} else { |
|||
ngoalslines.add(ChatColor.translateAlternateColorCodes('&', line)); |
|||
} |
|||
} |
|||
TruenoHologram hologram = TruenoHologramAPI.getNewHologram(); |
|||
hologram.setDistanceBetweenLines(0.35); |
|||
hologram.setupWorldHologram(location, ngoalslines); |
|||
hologram.display(); |
|||
holo.put(type, hologram); |
|||
} |
|||
if (type.equals(BoardType.FOUR_KILLS)) { |
|||
removeHolo(type); |
|||
fkillslines.clear(); |
|||
for (String line : plugin.getLang().getList("tops.four.kills")) { |
|||
if (line.contains("<top>")) { |
|||
for (Top top : fkills.values()) { |
|||
fkillslines.add(ChatColor.YELLOW + "" + ChatColor.BOLD + top.getTop() + ".- " + ChatColor.GRAY + top.getName() + " - " + ChatColor.GOLD + "" + top.getAmount()); |
|||
} |
|||
} else { |
|||
fkillslines.add(ChatColor.translateAlternateColorCodes('&', line)); |
|||
} |
|||
} |
|||
TruenoHologram hologram = TruenoHologramAPI.getNewHologram(); |
|||
hologram.setDistanceBetweenLines(0.35); |
|||
hologram.setupWorldHologram(location, fkillslines); |
|||
hologram.display(); |
|||
holo.put(type, hologram); |
|||
} |
|||
if (type.equals(BoardType.FOUR_WINS)) { |
|||
removeHolo(type); |
|||
fwinslines.clear(); |
|||
for (String line : plugin.getLang().getList("tops.four.wins")) { |
|||
if (line.contains("<top>")) { |
|||
for (Top top : fwins.values()) { |
|||
fwinslines.add(ChatColor.YELLOW + "" + ChatColor.BOLD + top.getTop() + ".- " + ChatColor.GRAY + top.getName() + " - " + ChatColor.GOLD + "" + top.getAmount()); |
|||
} |
|||
} else { |
|||
fwinslines.add(ChatColor.translateAlternateColorCodes('&', line)); |
|||
} |
|||
} |
|||
TruenoHologram hologram = TruenoHologramAPI.getNewHologram(); |
|||
hologram.setDistanceBetweenLines(0.35); |
|||
hologram.setupWorldHologram(location, fwinslines); |
|||
hologram.display(); |
|||
holo.put(type, hologram); |
|||
} |
|||
if (type.equals(BoardType.FOUR_GOALS)) { |
|||
removeHolo(type); |
|||
fgoalslines.clear(); |
|||
for (String line : plugin.getLang().getList("tops.four.goals")) { |
|||
if (line.contains("<top>")) { |
|||
for (Top top : fgoals.values()) { |
|||
fgoalslines.add(ChatColor.YELLOW + "" + ChatColor.BOLD + top.getTop() + ".- " + ChatColor.GRAY + top.getName() + " - " + ChatColor.GOLD + "" + top.getAmount()); |
|||
} |
|||
} else { |
|||
fgoalslines.add(ChatColor.translateAlternateColorCodes('&', line)); |
|||
} |
|||
} |
|||
TruenoHologram hologram = TruenoHologramAPI.getNewHologram(); |
|||
hologram.setDistanceBetweenLines(0.35); |
|||
hologram.setupWorldHologram(location, fgoalslines); |
|||
hologram.display(); |
|||
holo.put(type, hologram); |
|||
} |
|||
} |
|||
|
|||
public void addTop(Top top) { |
|||
if (top.getType().equals(BoardType.NORMAL_KILLS)) { |
|||
nkills.put(getTopNumber(top), top); |
|||
} else if (top.getType().equals(BoardType.NORMAL_WINS)) { |
|||
nwins.put(getTopNumber(top), top); |
|||
} else if (top.getType().equals(BoardType.NORMAL_GOALS)) { |
|||
ngoals.put(getTopNumber(top), top); |
|||
} else if (top.getType().equals(BoardType.FOUR_KILLS)) { |
|||
fkills.put(getTopNumber(top), top); |
|||
} else if (top.getType().equals(BoardType.FOUR_WINS)) { |
|||
fwins.put(getTopNumber(top), top); |
|||
} else if (top.getType().equals(BoardType.FOUR_GOALS)) { |
|||
fgoals.put(getTopNumber(top), top); |
|||
} |
|||
} |
|||
|
|||
public int getTopNumber(Top top) { |
|||
if (top.getType().equals(BoardType.NORMAL_KILLS)) { |
|||
return nkills.size() + 1; |
|||
} |
|||
if (top.getType().equals(BoardType.NORMAL_WINS)) { |
|||
return nwins.size() + 1; |
|||
} |
|||
if (top.getType().equals(BoardType.NORMAL_GOALS)) { |
|||
return ngoals.size() + 1; |
|||
} |
|||
if (top.getType().equals(BoardType.FOUR_KILLS)) { |
|||
return fkills.size() + 1; |
|||
} |
|||
if (top.getType().equals(BoardType.FOUR_WINS)) { |
|||
return fwins.size() + 1; |
|||
} |
|||
if (top.getType().equals(BoardType.FOUR_GOALS)) { |
|||
return fgoals.size() + 1; |
|||
} |
|||
return 0; |
|||
} |
|||
|
|||
public HashMap<Player, ArrayList<TruenoHologram>> getHolograms(){ |
|||
return playerHolo; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,212 @@ |
|||
package cx.sfy.TheBridge.menus; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.Material; |
|||
import org.bukkit.SkullType; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.inventory.Inventory; |
|||
import org.bukkit.inventory.ItemStack; |
|||
import org.bukkit.inventory.meta.ItemMeta; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.archievements.Archi; |
|||
import cx.sfy.TheBridge.archievements.ArchiType; |
|||
import cx.sfy.TheBridge.database.PlayerStat; |
|||
import cx.sfy.TheBridge.listeners.PlayerListener; |
|||
import cx.sfy.TheBridge.utils.ItemBuilder; |
|||
|
|||
public class AchievementsMenu { |
|||
|
|||
Main plugin; |
|||
|
|||
public AchievementsMenu(Main plugin) { |
|||
this.plugin = plugin; |
|||
} |
|||
|
|||
public void createArchievementsMenu(Player p, int page) { |
|||
PlayerStat ps = PlayerStat.getPlayerStat(p); |
|||
Inventory inv = Bukkit.getServer().createInventory(null, 54, plugin.getAchievement().get("title").replaceAll("<player>", p.getName())); |
|||
ItemStack signKill = ItemBuilder.item(Material.valueOf(plugin.getAchievement().get("kills.item")), plugin.getAchievement().getInt("kills.amount"), (short)plugin.getAchievement().getInt("kills.data"), plugin.getAchievement().get("kills.name"), plugin.getAchievement().get("kills.lore")); |
|||
ItemStack signWin = ItemBuilder.item(Material.valueOf(plugin.getAchievement().get("wins.item")), plugin.getAchievement().getInt("wins.amount"), (short)plugin.getAchievement().getInt("wins.data"), plugin.getAchievement().get("wins.name"), plugin.getAchievement().get("wins.lore")); |
|||
ItemStack signGoals = ItemBuilder.item(Material.valueOf(plugin.getAchievement().get("goals.item")), plugin.getAchievement().getInt("goals.amount"), (short)plugin.getAchievement().getInt("goals.data"), plugin.getAchievement().get("goals.name"), plugin.getAchievement().get("goals.lore")); |
|||
ItemStack signPlaced = ItemBuilder.item(Material.valueOf(plugin.getAchievement().get("blocks_placed.item")), plugin.getAchievement().getInt("blocks_placed.amount"), (short)plugin.getAchievement().getInt("blocks_placed.data"), plugin.getAchievement().get("blocks_placed.name"), plugin.getAchievement().get("blocks_placed.lore")); |
|||
ItemStack signBroken = ItemBuilder.item(Material.valueOf(plugin.getAchievement().get("blocks_bloken.item")), plugin.getAchievement().getInt("blocks_bloken.amount"), (short)plugin.getAchievement().getInt("blocks_bloken.data"), plugin.getAchievement().get("blocks_bloken.name"), plugin.getAchievement().get("blocks_bloken.lore")); |
|||
ItemStack gLeft = ItemBuilder.item(Material.STAINED_GLASS_PANE, 1, (short)7, plugin.getAchievement().get("archivements").replaceAll("<arrow>", "→"), ""); |
|||
ItemStack gRight = ItemBuilder.item(Material.STAINED_GLASS_PANE, 1, (short)7, plugin.getAchievement().get("archivements").replaceAll("<arrow>", "�"), ""); |
|||
ItemStack next = ItemBuilder.createSkull(Material.SKULL_ITEM, 1, (short)SkullType.PLAYER.ordinal(), plugin.getAchievement().get("next").replaceAll("<next>", "→"), "", "creeyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjgyYWQxYjljYjRkZDIxMjU5YzBkNzVhYTMxNWZmMzg5YzNjZWY3NTJiZTM5NDkzMzgxNjRiYWM4NGE5NmUifX19"); |
|||
ItemStack back = ItemBuilder.createSkull(Material.SKULL_ITEM, 1, (short)SkullType.PLAYER.ordinal(), plugin.getAchievement().get("back").replaceAll("<back>", "�"), "", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzdhZWU5YTc1YmYwZGY3ODk3MTgzMDE1Y2NhMGIyYTdkNzU1YzYzMzg4ZmYwMTc1MmQ1ZjQ0MTlmYzY0NSJ9fX0="); |
|||
ItemStack close = ItemBuilder.item(Material.valueOf(plugin.getAchievement().get("close.item")), plugin.getAchievement().getInt("close.amount"), (short)plugin.getAchievement().getInt("close.data"), plugin.getAchievement().get("close.name"), plugin.getAchievement().get("close.lore")); |
|||
inv.setItem(0, gLeft); |
|||
inv.setItem(9, gLeft); |
|||
inv.setItem(18, gLeft); |
|||
inv.setItem(27, gLeft); |
|||
inv.setItem(36, gLeft); |
|||
inv.setItem(8, gRight); |
|||
inv.setItem(17, gRight); |
|||
inv.setItem(26, gRight); |
|||
inv.setItem(35, gRight); |
|||
inv.setItem(44, gRight); |
|||
inv.setItem(2, signKill); |
|||
inv.setItem(3, signWin); |
|||
inv.setItem(4, signGoals); |
|||
inv.setItem(5, signPlaced); |
|||
inv.setItem(6, signBroken); |
|||
if (plugin.getAM().getArchiements().get(ArchiType.KILLS).size() >= (page + 1) * 4 |
|||
&& plugin.getAM().getArchiements().get(ArchiType.WINS).size() >= (page + 1) * 4 |
|||
&& plugin.getAM().getArchiements().get(ArchiType.GOALS).size() >= (page + 1) * 4 |
|||
&& plugin.getAM().getArchiements().get(ArchiType.BLOCKS_PLACED).size() >= (page + 1) * 4 |
|||
&& plugin.getAM().getArchiements().get(ArchiType.BLOCKS_BROKEN).size() >= (page + 1) * 4) { |
|||
inv.setItem(53, next); |
|||
} |
|||
if (PlayerListener.page.containsKey(p)) { |
|||
inv.setItem(45, back); |
|||
} |
|||
inv.setItem(49, close); |
|||
int min = (page - 1) * 4; |
|||
for (int i = 1; i < 5; i++) { |
|||
Archi archi = plugin.getAM().getArchiements().get(ArchiType.KILLS).get((i - 1) + min); |
|||
if (ps.getFourKills() + ps.getNormalKills() <= archi.getMax()) { |
|||
ItemStack locked = plugin.getAM().getLocked().clone(); |
|||
ItemMeta lockedM = locked.getItemMeta(); |
|||
List<String> loreNew = new ArrayList<String>(); |
|||
for (String msg : lockedM.getLore()) { |
|||
loreNew.add(msg.replaceAll("&", "§").replaceAll("<money>", String.valueOf(archi.getMoney())).replaceAll("<xp>", String.valueOf(archi.getXp())).replaceAll("<max>", String.valueOf(archi.getMax())).replaceAll("<name>", archi.getName()).replaceAll("<description>", archi.getDescription()).replaceAll("<current>", String.valueOf(ps.getFourKills() + ps.getNormalKills()))); |
|||
} |
|||
lockedM.setDisplayName("§c" + archi.getName()); |
|||
lockedM.getLore().clear(); |
|||
lockedM.setLore(loreNew); |
|||
locked.setItemMeta(lockedM); |
|||
inv.setItem(2 + (9 * (i)), locked); |
|||
} else { |
|||
ItemStack unlocked = plugin.getAM().getUnlocked().clone(); |
|||
ItemMeta unlockedM = unlocked.getItemMeta(); |
|||
List<String> loreNew = new ArrayList<String>(); |
|||
for (String msg : unlockedM.getLore()) { |
|||
loreNew.add(msg.replaceAll("&", "§").replaceAll("<money>", String.valueOf(archi.getMoney())).replaceAll("<xp>", String.valueOf(archi.getXp())).replaceAll("<name>", archi.getName()).replaceAll("<description>", archi.getDescription()).replaceAll("<current>", String.valueOf(ps.getFourKills() + ps.getNormalKills()))); |
|||
} |
|||
unlockedM.setDisplayName("§a" + archi.getName()); |
|||
unlockedM.getLore().clear(); |
|||
unlockedM.setLore(loreNew); |
|||
unlocked.setItemMeta(unlockedM); |
|||
inv.setItem(2 + (9 * (i)), unlocked); |
|||
} |
|||
} |
|||
for (int i = 1; i < 5; i++) { |
|||
Archi archi = plugin.getAM().getArchiements().get(ArchiType.WINS).get((i - 1) + min); |
|||
if (ps.getFourWins() + ps.getNormalWins() <= archi.getMax()) { |
|||
ItemStack locked = plugin.getAM().getLocked().clone(); |
|||
ItemMeta lockedM = locked.getItemMeta(); |
|||
List<String> loreNew = new ArrayList<String>(); |
|||
for (String msg : lockedM.getLore()) { |
|||
loreNew.add(msg.replaceAll("&", "§").replaceAll("<money>", String.valueOf(archi.getMoney())).replaceAll("<xp>", String.valueOf(archi.getXp())).replaceAll("<max>", String.valueOf(archi.getMax())).replaceAll("<name>", archi.getName()).replaceAll("<description>", archi.getDescription()).replaceAll("<current>", String.valueOf(ps.getFourWins() + ps.getNormalWins()))); |
|||
} |
|||
lockedM.setDisplayName("§c" + archi.getName()); |
|||
lockedM.getLore().clear(); |
|||
lockedM.setLore(loreNew); |
|||
locked.setItemMeta(lockedM); |
|||
inv.setItem(3 + (9 * (i)), locked); |
|||
} else { |
|||
ItemStack unlocked = plugin.getAM().getUnlocked().clone(); |
|||
ItemMeta unlockedM = unlocked.getItemMeta(); |
|||
List<String> loreNew = new ArrayList<String>(); |
|||
for (String msg : unlockedM.getLore()) { |
|||
loreNew.add(msg.replaceAll("&", "§").replaceAll("<money>", String.valueOf(archi.getMoney())).replaceAll("<xp>", String.valueOf(archi.getXp())).replaceAll("<name>", archi.getName()).replaceAll("<description>", archi.getDescription()).replaceAll("<current>", String.valueOf(ps.getFourWins() + ps.getNormalWins()))); |
|||
} |
|||
unlockedM.setDisplayName("§a" + archi.getName()); |
|||
unlockedM.getLore().clear(); |
|||
unlockedM.setLore(loreNew); |
|||
unlocked.setItemMeta(unlockedM); |
|||
inv.setItem(3 + (9 * (i)), unlocked); |
|||
} |
|||
} |
|||
for (int i = 1; i < 5; i++) { |
|||
Archi archi = plugin.getAM().getArchiements().get(ArchiType.GOALS).get((i - 1) + min); |
|||
if (ps.getFourGoals() + ps.getNormalGoals() <= archi.getMax()) { |
|||
ItemStack locked = plugin.getAM().getLocked().clone(); |
|||
ItemMeta lockedM = locked.getItemMeta(); |
|||
List<String> loreNew = new ArrayList<String>(); |
|||
for (String msg : lockedM.getLore()) { |
|||
loreNew.add(msg.replaceAll("&", "§").replaceAll("<money>", String.valueOf(archi.getMoney())).replaceAll("<xp>", String.valueOf(archi.getXp())).replaceAll("<max>", String.valueOf(archi.getMax())).replaceAll("<name>", archi.getName()).replaceAll("<description>", archi.getDescription()).replaceAll("<current>", String.valueOf(ps.getFourGoals() + ps.getNormalGoals()))); |
|||
} |
|||
lockedM.setDisplayName("§c" + archi.getName()); |
|||
lockedM.getLore().clear(); |
|||
lockedM.setLore(loreNew); |
|||
locked.setItemMeta(lockedM); |
|||
inv.setItem(4 + (9 * (i)), locked); |
|||
} else { |
|||
ItemStack unlocked = plugin.getAM().getUnlocked().clone(); |
|||
ItemMeta unlockedM = unlocked.getItemMeta(); |
|||
List<String> loreNew = new ArrayList<String>(); |
|||
for (String msg : unlockedM.getLore()) { |
|||
loreNew.add(msg.replaceAll("&", "§").replaceAll("<money>", String.valueOf(archi.getMoney())).replaceAll("<xp>", String.valueOf(archi.getXp())).replaceAll("<name>", archi.getName()).replaceAll("<description>", archi.getDescription()).replaceAll("<current>", String.valueOf(ps.getFourGoals() + ps.getNormalGoals()))); |
|||
} |
|||
unlockedM.setDisplayName("§a" + archi.getName()); |
|||
unlockedM.getLore().clear(); |
|||
unlockedM.setLore(loreNew); |
|||
unlocked.setItemMeta(unlockedM); |
|||
inv.setItem(4 + (9 * (i)), unlocked); |
|||
} |
|||
} |
|||
for (int i = 1; i < 5; i++) { |
|||
Archi archi = plugin.getAM().getArchiements().get(ArchiType.BLOCKS_PLACED).get((i - 1) + min); |
|||
if (ps.getPlaced() <= archi.getMax()) { |
|||
ItemStack locked = plugin.getAM().getLocked().clone(); |
|||
ItemMeta lockedM = locked.getItemMeta(); |
|||
List<String> loreNew = new ArrayList<String>(); |
|||
for (String msg : lockedM.getLore()) { |
|||
loreNew.add(msg.replaceAll("&", "§").replaceAll("<money>", String.valueOf(archi.getMoney())).replaceAll("<xp>", String.valueOf(archi.getXp())).replaceAll("<max>", String.valueOf(archi.getMax())).replaceAll("<name>", archi.getName()).replaceAll("<description>", archi.getDescription()).replaceAll("<current>", String.valueOf(ps.getPlaced()))); |
|||
} |
|||
lockedM.setDisplayName("§c" + archi.getName()); |
|||
lockedM.getLore().clear(); |
|||
lockedM.setLore(loreNew); |
|||
locked.setItemMeta(lockedM); |
|||
inv.setItem(5 + (9 * (i)), locked); |
|||
} else { |
|||
ItemStack unlocked = plugin.getAM().getUnlocked().clone(); |
|||
ItemMeta unlockedM = unlocked.getItemMeta(); |
|||
List<String> loreNew = new ArrayList<String>(); |
|||
for (String msg : unlockedM.getLore()) { |
|||
loreNew.add(msg.replaceAll("&", "§").replaceAll("<money>", String.valueOf(archi.getMoney())).replaceAll("<xp>", String.valueOf(archi.getXp())).replaceAll("<name>", archi.getName()).replaceAll("<description>", archi.getDescription()).replaceAll("<current>", String.valueOf(ps.getPlaced()))); |
|||
} |
|||
unlockedM.setDisplayName("§a" + archi.getName()); |
|||
unlockedM.getLore().clear(); |
|||
unlockedM.setLore(loreNew); |
|||
unlocked.setItemMeta(unlockedM); |
|||
inv.setItem(5 + (9 * (i)), unlocked); |
|||
} |
|||
} |
|||
for (int i = 1; i < 5; i++) { |
|||
Archi archi = plugin.getAM().getArchiements().get(ArchiType.BLOCKS_BROKEN).get((i - 1) + min); |
|||
if (ps.getBroken() <= archi.getMax()) { |
|||
ItemStack locked = plugin.getAM().getLocked().clone(); |
|||
ItemMeta lockedM = locked.getItemMeta(); |
|||
List<String> loreNew = new ArrayList<String>(); |
|||
for (String msg : lockedM.getLore()) { |
|||
loreNew.add(msg.replaceAll("&", "§").replaceAll("<money>", String.valueOf(archi.getMoney())).replaceAll("<xp>", String.valueOf(archi.getXp())).replaceAll("<max>", String.valueOf(archi.getMax())).replaceAll("<name>", archi.getName()).replaceAll("<description>", archi.getDescription()).replaceAll("<current>", String.valueOf(ps.getBroken()))); |
|||
} |
|||
lockedM.setDisplayName("§c" + archi.getName()); |
|||
lockedM.getLore().clear(); |
|||
lockedM.setLore(loreNew); |
|||
locked.setItemMeta(lockedM); |
|||
inv.setItem(6 + (9 * (i)), locked); |
|||
} else { |
|||
ItemStack unlocked = plugin.getAM().getUnlocked().clone(); |
|||
ItemMeta unlockedM = unlocked.getItemMeta(); |
|||
List<String> loreNew = new ArrayList<String>(); |
|||
for (String msg : unlockedM.getLore()) { |
|||
loreNew.add(msg.replaceAll("&", "§").replaceAll("<money>", String.valueOf(archi.getMoney())).replaceAll("<xp>", String.valueOf(archi.getXp())).replaceAll("<name>", archi.getName()).replaceAll("<description>", archi.getDescription()).replaceAll("<current>", String.valueOf(ps.getBroken()))); |
|||
} |
|||
unlockedM.setDisplayName("§a" + archi.getName()); |
|||
unlockedM.getLore().clear(); |
|||
unlockedM.setLore(loreNew); |
|||
unlocked.setItemMeta(unlockedM); |
|||
inv.setItem(6 + (9 * (i)), unlocked); |
|||
} |
|||
} |
|||
p.openInventory(inv); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,121 @@ |
|||
package cx.sfy.TheBridge.menus; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.Material; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.inventory.Inventory; |
|||
import org.bukkit.inventory.ItemStack; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.game.Game; |
|||
import cx.sfy.TheBridge.game.Game.State; |
|||
import cx.sfy.TheBridge.game.GameFour; |
|||
import cx.sfy.TheBridge.game.GameFour.FState; |
|||
import cx.sfy.TheBridge.utils.ItemBuilder; |
|||
|
|||
public class GameMenu { |
|||
|
|||
Main plugin; |
|||
|
|||
public GameMenu(Main plugin) { |
|||
this.plugin = plugin; |
|||
} |
|||
|
|||
public void openSelectTypeMenu(Player p) { |
|||
final Inventory inv = Bukkit.getServer().createInventory(null, 27, plugin.getLang().get(p, "menus.type.title")); |
|||
final ItemStack normal = ItemBuilder.item(Material.STAINED_CLAY, 1, (short)11, plugin.getLang().get(p, "menus.type.normal.nameItem"), plugin.getLang().get(p, "menus.type.normal.loreItem")); |
|||
final ItemStack four = ItemBuilder.item(Material.STAINED_CLAY, 1, (short)14, plugin.getLang().get(p, "menus.type.four.nameItem"), plugin.getLang().get(p, "menus.type.four.loreItem")); |
|||
inv.setItem(11, normal); |
|||
inv.setItem(15, four); |
|||
p.openInventory(inv); |
|||
} |
|||
|
|||
public void openGameMenu(Player p) { |
|||
final Inventory inv = Bukkit.getServer().createInventory(null, 27, plugin.getLang().get(p, "menus.game.title")); |
|||
for (final Game game : plugin.getGM().getGames()) |
|||
inv.addItem(game(p, game)); |
|||
p.openInventory(inv); |
|||
} |
|||
|
|||
public void openGameFourMenu(Player p) { |
|||
final Inventory inv = Bukkit.getServer().createInventory(null, 27, plugin.getLang().get(p, "menus.gameFour.title")); |
|||
for (final GameFour game : plugin.getGM().getGamesFour()) |
|||
inv.addItem(game(p, game)); |
|||
p.openInventory(inv); |
|||
} |
|||
|
|||
protected ItemStack game(Player p, Game game) { |
|||
final ItemStack item = ItemBuilder.item(Material.STAINED_CLAY, 1, getState(game), "§a" + game.getName(), plugin.getLang().get(p, "menus.game.generalDesc").replaceAll("<players>", String.valueOf(game.getPlayers())).replaceAll("<max>", String.valueOf(game.getMax())).replaceAll("<mode>", game.getMode()).replaceAll("<state>", getState(game.getState()))); |
|||
return item; |
|||
} |
|||
|
|||
protected ItemStack game(Player p, GameFour game) { |
|||
final ItemStack item = ItemBuilder.item(Material.STAINED_CLAY, 1, getState(game), "§a" + game.getName(), plugin.getLang().get(p, "menus.game.generalDesc").replaceAll("<players>", String.valueOf(game.getPlayers().size())).replaceAll("<max>", String.valueOf(game.getMax())).replaceAll("<mode>", game.getMode()).replaceAll("<state>", getState(game.getState()))); |
|||
return item; |
|||
} |
|||
|
|||
protected String getState(FState state) { |
|||
if (state == FState.WAITING) |
|||
return plugin.getLang().get("states.waiting"); |
|||
if (state == FState.STARTING) |
|||
return plugin.getLang().get("states.starting"); |
|||
if (state == FState.PREGAME) |
|||
return plugin.getLang().get("states.pregame"); |
|||
if (state == FState.INGAME) |
|||
return plugin.getLang().get("states.ingame"); |
|||
if (state == FState.FINISH) |
|||
return plugin.getLang().get("states.finish"); |
|||
if (state == FState.RESTARTING) |
|||
return plugin.getLang().get("states.restarting"); |
|||
return ""; |
|||
} |
|||
|
|||
protected String getState(State state) { |
|||
if (state == State.WAITING) |
|||
return plugin.getLang().get("states.waiting"); |
|||
if (state == State.STARTING) |
|||
return plugin.getLang().get("states.starting"); |
|||
if (state == State.PREGAME) |
|||
return plugin.getLang().get("states.pregame"); |
|||
if (state == State.INGAME) |
|||
return plugin.getLang().get("states.ingame"); |
|||
if (state == State.FINISH) |
|||
return plugin.getLang().get("states.finish"); |
|||
if (state == State.RESTARTING) |
|||
return plugin.getLang().get("states.restarting"); |
|||
return ""; |
|||
} |
|||
|
|||
protected short getState(Game game) { |
|||
if (game.isState(State.WAITING)) |
|||
return (short)plugin.getConfig().getInt("signs.waiting"); |
|||
if (game.isState(State.STARTING)) |
|||
return (short)plugin.getConfig().getInt("signs.starting"); |
|||
if (game.isState(State.PREGAME)) |
|||
return (short)plugin.getConfig().getInt("signs.pregame"); |
|||
if (game.isState(State.INGAME)) |
|||
return (short)plugin.getConfig().getInt("signs.ingame"); |
|||
if (game.isState(State.RESTARTING)) |
|||
return (short)plugin.getConfig().getInt("signs.restart"); |
|||
if (game.isState(State.FINISH)) |
|||
return (short)plugin.getConfig().getInt("signs.finish"); |
|||
return 5; |
|||
} |
|||
|
|||
protected short getState(GameFour game) { |
|||
if (game.isState(FState.WAITING)) |
|||
return (short)plugin.getConfig().getInt("signs.waiting"); |
|||
if (game.isState(FState.STARTING)) |
|||
return (short)plugin.getConfig().getInt("signs.starting"); |
|||
if (game.isState(FState.PREGAME)) |
|||
return (short)plugin.getConfig().getInt("signs.pregame"); |
|||
if (game.isState(FState.INGAME)) |
|||
return (short)plugin.getConfig().getInt("signs.ingame"); |
|||
if (game.isState(FState.RESTARTING)) |
|||
return (short)plugin.getConfig().getInt("signs.restart"); |
|||
if (game.isState(FState.FINISH)) |
|||
return (short)plugin.getConfig().getInt("signs.finish"); |
|||
return 5; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,33 @@ |
|||
package cx.sfy.TheBridge.menus; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.inventory.Inventory; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.cosmetics.cages.Cage; |
|||
|
|||
public class GlassMenu { |
|||
|
|||
Main plugin; |
|||
|
|||
public GlassMenu(Main plugin) { |
|||
this.plugin = plugin; |
|||
} |
|||
|
|||
public void createGlassMenu(Player p) { |
|||
Inventory inv = Bukkit.getServer().createInventory(null, plugin.getCages().getInt("size"), plugin.getCages().get("title")); |
|||
for (Cage cage : plugin.getCM().getCages().values()) { |
|||
System.out.println(cage == null); |
|||
if (!cage.isBuy() && !p.hasPermission(cage.getPermission())) { |
|||
inv.setItem(cage.getSlot(), cage.getPermIcon()); |
|||
} else if (cage.isBuy() && !p.hasPermission(cage.getPermission())) { |
|||
inv.setItem(cage.getSlot(), cage.getBuyIcon()); |
|||
} else { |
|||
inv.setItem(cage.getSlot(), cage.getHasIcon()); |
|||
} |
|||
} |
|||
p.openInventory(inv); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,29 @@ |
|||
package cx.sfy.TheBridge.menus; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.Material; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.inventory.Inventory; |
|||
import org.bukkit.inventory.ItemStack; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.utils.ItemBuilder; |
|||
|
|||
public class ShopMenu { |
|||
|
|||
Main plugin; |
|||
|
|||
public ShopMenu(Main plugin) { |
|||
this.plugin = plugin; |
|||
} |
|||
|
|||
public void openShopMenu(Player p) { |
|||
Inventory inv = Bukkit.getServer().createInventory(null, plugin.getConfig().getInt("shop.size"), plugin.getLang().get("shop.title")); |
|||
ItemStack glass = ItemBuilder.item(Material.valueOf(plugin.getConfig().getString("shop.glass.icon")), plugin.getConfig().getInt("shop.glass.amount"), (short)plugin.getConfig().getInt("shop.glass.data"), plugin.getLang().get("shop.glass.nameItem"), plugin.getLang().get("shop.glass.loreItem")); |
|||
ItemStack close = ItemBuilder.item(Material.valueOf(plugin.getConfig().getString("shop.close.icon")), plugin.getConfig().getInt("shop.close.amount"), (short)plugin.getConfig().getInt("shop.close.data"), plugin.getLang().get("shop.close.nameItem"), plugin.getLang().get("shop.close.loreItem")); |
|||
inv.setItem(plugin.getConfig().getInt("shop.glass.slot"), glass); |
|||
inv.setItem(plugin.getConfig().getInt("shop.close.slot"), close); |
|||
p.openInventory(inv); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,49 @@ |
|||
package cx.sfy.TheBridge.menus; |
|||
|
|||
import java.util.HashMap; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.Material; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.inventory.Inventory; |
|||
import org.bukkit.inventory.ItemStack; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.utils.ItemBuilder; |
|||
|
|||
public class SpectOptionsMenu { |
|||
|
|||
public HashMap<Player, Boolean> settings = new HashMap<Player, Boolean>(); |
|||
public Main plugin; |
|||
public SpectOptionsMenu(Main plugin){ |
|||
this.plugin = plugin; |
|||
} |
|||
|
|||
public void openOptionsMenu(Player p) { |
|||
Inventory inv = Bukkit.createInventory(null, 36, plugin.getLang().get("menus.options.title")); |
|||
ItemStack velo1 = ItemBuilder.item(Material.LEATHER_BOOTS, 1, (short)0, plugin.getLang().get("menus.options.velocidad.nameItem").replaceAll("<#>", "I"), plugin.getLang().get("menus.options.velocidad.loreItem").replaceAll("<#>", "I")); |
|||
ItemStack velo2 = ItemBuilder.item(Material.GOLD_BOOTS, 1, (short)0, plugin.getLang().get("menus.options.velocidad.nameItem").replaceAll("<#>", "II"), plugin.getLang().get("menus.options.velocidad.loreItem").replaceAll("<#>", "II")); |
|||
ItemStack velo3 = ItemBuilder.item(Material.CHAINMAIL_BOOTS, 1, (short)0, plugin.getLang().get("menus.options.velocidad.nameItem").replaceAll("<#>", "III"), plugin.getLang().get("menus.options.velocidad.loreItem").replaceAll("<#>", "III")); |
|||
ItemStack velo4 = ItemBuilder.item(Material.IRON_BOOTS, 1, (short)0, plugin.getLang().get("menus.options.velocidad.nameItem").replaceAll("<#>", "IV"), plugin.getLang().get("menus.options.velocidad.loreItem").replaceAll("<#>", "IV")); |
|||
ItemStack velo5 = ItemBuilder.item(Material.DIAMOND_BOOTS, 1, (short)0, plugin.getLang().get("menus.options.velocidad.nameItem").replaceAll("<#>", "V"), plugin.getLang().get("menus.options.velocidad.loreItem").replaceAll("<#>", "V")); |
|||
ItemStack visNo = ItemBuilder.item(Material.EYE_OF_ENDER, 1, (short)0, plugin.getLang().get("menus.options.vision.nameItem").replaceAll("<type>", plugin.getLang().get("menus.options.enable")), plugin.getLang().get("menus.options.vision.loreItem").replaceAll("<type>", plugin.getLang().get("menus.options.enable"))); |
|||
ItemStack visSi = ItemBuilder.item(Material.ENDER_PEARL, 1, (short)0, plugin.getLang().get("menus.options.vision.nameItem").replaceAll("<type>", plugin.getLang().get("menus.options.disable")), plugin.getLang().get("menus.options.vision.loreItem").replaceAll("<type>", plugin.getLang().get("menus.options.disable"))); |
|||
inv.setItem(11, velo1); |
|||
inv.setItem(12, velo2); |
|||
inv.setItem(13, velo3); |
|||
inv.setItem(14, velo4); |
|||
inv.setItem(15, velo5); |
|||
if (settings.containsKey(p)) { |
|||
if (settings.get(p) == true) { |
|||
inv.setItem(22, visNo); |
|||
} else { |
|||
inv.setItem(22, visSi); |
|||
} |
|||
} else { |
|||
settings.put(p, false); |
|||
inv.setItem(22, visSi); |
|||
} |
|||
p.openInventory(inv); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,81 @@ |
|||
package cx.sfy.TheBridge.menus; |
|||
|
|||
import java.text.DecimalFormat; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.ChatColor; |
|||
import org.bukkit.Material; |
|||
import org.bukkit.SkullType; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.inventory.Inventory; |
|||
import org.bukkit.inventory.ItemStack; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.game.GameFour; |
|||
import cx.sfy.TheBridge.team.TeamFour; |
|||
import cx.sfy.TheBridge.utils.ItemBuilder; |
|||
|
|||
public class SpectPlayerMenu { |
|||
|
|||
Main plugin; |
|||
DecimalFormat df = new DecimalFormat("##.##"); |
|||
|
|||
public SpectPlayerMenu(Main plugin) { |
|||
this.plugin = plugin; |
|||
} |
|||
|
|||
public void openSpectPlayerMenu(Player p) { |
|||
GameFour game = plugin.getGM().getGameFourByPlayer(p); |
|||
Inventory inv = Bukkit.getServer().createInventory(null, 54, plugin.getLang().get("menus.options.title")); |
|||
ItemStack wool1 = ItemBuilder.item(Material.STAINED_CLAY, 1, (short)11, plugin.getLang().get("menus.teleport.team.nameItem").replaceAll("<color>", "" + ChatColor.BLUE).replaceAll("<team>", game.getTeams().get(ChatColor.BLUE).getTeamName()), plugin.getLang().get("menus.teleport.team.loreItem")); |
|||
ItemStack wool2 = ItemBuilder.item(Material.STAINED_CLAY, 1, (short)14, plugin.getLang().get("menus.teleport.team.nameItem").replaceAll("<color>", "" + ChatColor.RED).replaceAll("<team>", game.getTeams().get(ChatColor.RED).getTeamName()), plugin.getLang().get("menus.teleport.team.loreItem")); |
|||
ItemStack wool3 = ItemBuilder.item(Material.STAINED_CLAY, 1, (short)4, plugin.getLang().get("menus.teleport.team.nameItem").replaceAll("<color>", "" + ChatColor.YELLOW).replaceAll("<team>", game.getTeams().get(ChatColor.YELLOW).getTeamName()), plugin.getLang().get("menus.teleport.team.loreItem")); |
|||
ItemStack wool4 = ItemBuilder.item(Material.STAINED_CLAY, 1, (short)5, plugin.getLang().get("menus.teleport.team.nameItem").replaceAll("<color>", "" + ChatColor.GREEN).replaceAll("<team>", game.getTeams().get(ChatColor.GREEN).getTeamName()), plugin.getLang().get("menus.teleport.team.loreItem")); |
|||
if (!game.getTeams().get(ChatColor.BLUE).getDeath()) { |
|||
TeamFour team = game.getTeams().get(ChatColor.BLUE); |
|||
for (int i = 0; i < team.getTeamPlayers().size(); i++) { |
|||
if (team.getTeamPlayers().get(i) != null) { |
|||
Player p1 = team.getTeamPlayers().get(i); |
|||
ItemStack ip1 = ItemBuilder.skull(Material.SKULL_ITEM, 1, (short)SkullType.PLAYER.ordinal(), plugin.getLang().get("menus.teleport.player.nameItem").replaceAll("<player>", "§7" + p1.getName()), plugin.getLang().get("menus.teleport.player.loreItem").replaceAll("<health>", df.format(p1.getHealth())), p1.getName()); |
|||
inv.setItem(i + 10, ip1); |
|||
} |
|||
} |
|||
} |
|||
if (!game.getTeams().get(ChatColor.RED).getDeath()) { |
|||
TeamFour team = game.getTeams().get(ChatColor.RED); |
|||
for (int i = 0; i < team.getTeamPlayers().size(); i++) { |
|||
if (team.getTeamPlayers().get(i) != null) { |
|||
Player p1 = team.getTeamPlayers().get(i); |
|||
ItemStack ip1 = ItemBuilder.skull(Material.SKULL_ITEM, 1, (short)SkullType.PLAYER.ordinal(), plugin.getLang().get("menus.teleport.player.nameItem").replaceAll("<player>", "§7" + p1.getName()), plugin.getLang().get("menus.teleport.player.loreItem").replaceAll("<health>", df.format(p1.getHealth())), p1.getName()); |
|||
inv.setItem(i + 19, ip1); |
|||
} |
|||
} |
|||
} |
|||
if (!game.getTeams().get(ChatColor.YELLOW).getDeath()) { |
|||
TeamFour team = game.getTeams().get(ChatColor.YELLOW); |
|||
for (int i = 0; i < team.getTeamPlayers().size(); i++) { |
|||
if (team.getTeamPlayers().get(i) != null) { |
|||
Player p1 = team.getTeamPlayers().get(i); |
|||
ItemStack ip1 = ItemBuilder.skull(Material.SKULL_ITEM, 1, (short)SkullType.PLAYER.ordinal(), plugin.getLang().get("menus.teleport.player.nameItem").replaceAll("<player>", "§7" + p1.getName()), plugin.getLang().get("menus.teleport.player.loreItem").replaceAll("<health>", df.format(p1.getHealth())), p1.getName()); |
|||
inv.setItem(i + 28, ip1); |
|||
} |
|||
} |
|||
} |
|||
if (!game.getTeams().get(ChatColor.GREEN).getDeath()) { |
|||
TeamFour team = game.getTeams().get(ChatColor.GREEN); |
|||
for (int i = 0; i < team.getTeamPlayers().size(); i++) { |
|||
if (team.getTeamPlayers().get(i) != null) { |
|||
Player p1 = team.getTeamPlayers().get(i); |
|||
ItemStack ip1 = ItemBuilder.skull(Material.SKULL_ITEM, 1, (short)SkullType.PLAYER.ordinal(), plugin.getLang().get("menus.teleport.player.nameItem").replaceAll("<player>", "§7" + p1.getName()), plugin.getLang().get("menus.teleport.player.loreItem").replaceAll("<health>", df.format(p1.getHealth())), p1.getName()); |
|||
inv.setItem(i + 36, ip1); |
|||
} |
|||
} |
|||
} |
|||
inv.setItem(9, wool1); |
|||
inv.setItem(18, wool2); |
|||
inv.setItem(27, wool3); |
|||
inv.setItem(36, wool4); |
|||
p.openInventory(inv); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,97 @@ |
|||
package cx.sfy.TheBridge.menus; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.ChatColor; |
|||
import org.bukkit.Material; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.inventory.Inventory; |
|||
import org.bukkit.inventory.ItemStack; |
|||
import org.bukkit.scheduler.BukkitRunnable; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.game.Game; |
|||
import cx.sfy.TheBridge.game.GameFour; |
|||
import cx.sfy.TheBridge.team.Team; |
|||
import cx.sfy.TheBridge.team.TeamFour; |
|||
import cx.sfy.TheBridge.utils.ItemBuilder; |
|||
|
|||
public class TeamMenu { |
|||
|
|||
Main plugin; |
|||
|
|||
public TeamMenu(Main plugin) { |
|||
this.plugin = plugin; |
|||
} |
|||
|
|||
public void openTeamFourMenu(Player p) { |
|||
GameFour game = plugin.getGM().getGameFourByPlayer(p); |
|||
Inventory inv = Bukkit.getServer().createInventory(null, 27, plugin.getLang().get("menus.teamFour.title")); |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
ItemStack blue = ItemBuilder.item(Material.STAINED_CLAY, (game.getTeams().get(ChatColor.BLUE).getTeamSize() == 0) ? 1 : game.getTeams().get(ChatColor.BLUE).getTeamSize(), (short)11, "§9" + plugin.getLang().get("menus.teamFour.team.nameItem").replaceAll("<#>", plugin.getConfig().getString("names.blue")), getLore(game.getTeams().get(ChatColor.BLUE))); |
|||
ItemStack red = ItemBuilder.item(Material.STAINED_CLAY, (game.getTeams().get(ChatColor.RED).getTeamSize() == 0) ? 1 : game.getTeams().get(ChatColor.RED).getTeamSize(), (short)14, "§c" + plugin.getLang().get("menus.teamFour.team.nameItem").replaceAll("<#>", plugin.getConfig().getString("names.red")), getLore(game.getTeams().get(ChatColor.RED))); |
|||
ItemStack yellow = ItemBuilder.item(Material.STAINED_CLAY, (game.getTeams().get(ChatColor.YELLOW).getTeamSize() == 0) ? 1 : game.getTeams().get(ChatColor.YELLOW).getTeamSize(), (short)4, "§e" + plugin.getLang().get("menus.teamFour.team.nameItem").replaceAll("<#>", plugin.getConfig().getString("names.yellow")), getLore(game.getTeams().get(ChatColor.YELLOW))); |
|||
ItemStack green = ItemBuilder.item(Material.STAINED_CLAY, (game.getTeams().get(ChatColor.GREEN).getTeamSize() == 0) ? 1 : game.getTeams().get(ChatColor.GREEN).getTeamSize(), (short)5, "§a" + plugin.getLang().get("menus.teamFour.team.nameItem").replaceAll("<#>", plugin.getConfig().getString("names.green")), getLore(game.getTeams().get(ChatColor.GREEN))); |
|||
inv.setItem(10, blue); |
|||
inv.setItem(12, red); |
|||
inv.setItem(14, yellow); |
|||
inv.setItem(16, green); |
|||
if (!p.getOpenInventory().getTitle().equals(plugin.getLang().get("menus.teamFour.title"))) { |
|||
cancel(); |
|||
} |
|||
} |
|||
}.runTaskTimer(plugin, 0, 0); |
|||
p.openInventory(inv); |
|||
} |
|||
|
|||
public void openTeamNormalMenu(Player p) { |
|||
Game game = plugin.getGM().getGameByPlayer(p); |
|||
Inventory inv = Bukkit.getServer().createInventory(null, 27, plugin.getLang().get("menus.team.title")); |
|||
new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
ItemStack blue = ItemBuilder.item(Material.STAINED_CLAY, (game.getTeams().get(ChatColor.BLUE).getTeamSize() == 0) ? 1 : game.getTeams().get(ChatColor.BLUE).getTeamSize(), (short)11, "§9" + plugin.getLang().get("menus.team.team.nameItem").replaceAll("<#>", plugin.getConfig().getString("names.blue")), getLore(game.getTeams().get(ChatColor.BLUE))); |
|||
ItemStack red = ItemBuilder.item(Material.STAINED_CLAY, (game.getTeams().get(ChatColor.RED).getTeamSize() == 0) ? 1 : game.getTeams().get(ChatColor.RED).getTeamSize(), (short)14, "§c" + plugin.getLang().get("menus.team.team.nameItem").replaceAll("<#>", plugin.getConfig().getString("names.red")), getLore(game.getTeams().get(ChatColor.RED))); |
|||
inv.setItem(11, blue); |
|||
inv.setItem(15, red); |
|||
if (!p.getOpenInventory().getTitle().equals(plugin.getLang().get("menus.team.title"))) { |
|||
cancel(); |
|||
} |
|||
} |
|||
}.runTaskTimer(plugin, 0, 0); |
|||
p.openInventory(inv); |
|||
} |
|||
|
|||
public List<String> getLore(Team team){ |
|||
List<String> lore = new ArrayList<String>(); |
|||
for (String msg : plugin.getLang().getList("menus.team.team.loreItem")) { |
|||
if (msg.contains("<teamPlayers>")) { |
|||
for (Player p : team.getTeamPlayers()) { |
|||
lore.add("§7- " + team.getColor() + p.getName()); |
|||
} |
|||
} else { |
|||
lore.add(msg.replaceAll("&", "§")); |
|||
} |
|||
} |
|||
return lore; |
|||
} |
|||
|
|||
public List<String> getLore(TeamFour team){ |
|||
List<String> lore = new ArrayList<String>(); |
|||
for (String msg : plugin.getLang().getList("menus.teamFour.team.loreItem")) { |
|||
if (msg.contains("<teamPlayers>")) { |
|||
for (Player p : team.getTeamPlayers()) { |
|||
lore.add("§7- " + team.getColor() + p.getName()); |
|||
} |
|||
} else { |
|||
lore.add(msg.replaceAll("&", "§")); |
|||
} |
|||
} |
|||
return lore; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,54 @@ |
|||
package cx.sfy.TheBridge.nms; |
|||
|
|||
import java.util.Arrays; |
|||
import java.util.List; |
|||
import java.util.Random; |
|||
|
|||
import org.bukkit.Location; |
|||
import org.bukkit.World; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.generator.BlockPopulator; |
|||
import org.bukkit.generator.ChunkGenerator; |
|||
|
|||
import cx.sfy.TheBridge.packets.Reflection; |
|||
|
|||
public class GenericNMS implements NMS { |
|||
|
|||
@Override |
|||
public ChunkGenerator getChunkGenerator() { |
|||
return new ChunkGenerator() { |
|||
@Override |
|||
public List<BlockPopulator> getDefaultPopulators(World world) { |
|||
return Arrays.asList(new BlockPopulator[0]); |
|||
} |
|||
|
|||
@Override |
|||
public boolean canSpawn(World world, int x, int z) { |
|||
return true; |
|||
} |
|||
|
|||
@Override |
|||
public byte[] generate(World world, Random random, int x, int z) { |
|||
return new byte[32768]; |
|||
} |
|||
|
|||
@Override |
|||
public Location getFixedSpawnLocation(World world, Random random) { |
|||
return new Location(world, 0.0D, 64.0D, 0.0D); |
|||
} |
|||
}; |
|||
} |
|||
|
|||
@Override |
|||
public void sendTitle(Player player, int fadein, int stay, int fadeout, String title, String subtitle) { |
|||
Reflection.sendTitle(player, fadein, stay, fadeout, title, subtitle); |
|||
|
|||
} |
|||
|
|||
@Override |
|||
public void sendActionBar(Player player, String s) { |
|||
Reflection.sendAction(player, s); |
|||
|
|||
} |
|||
|
|||
} |
@ -0,0 +1,12 @@ |
|||
package cx.sfy.TheBridge.nms; |
|||
|
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.generator.ChunkGenerator; |
|||
|
|||
public interface NMS { |
|||
|
|||
public ChunkGenerator getChunkGenerator(); |
|||
public void sendTitle(Player player, int fadein, int stay, int fadeout, String title, String subtitle); |
|||
public void sendActionBar(Player player, String s); |
|||
|
|||
} |
@ -0,0 +1,31 @@ |
|||
package cx.sfy.TheBridge.packets; |
|||
|
|||
import org.bukkit.entity.Player; |
|||
|
|||
import cx.sfy.TheBridge.client.ClientPacket; |
|||
import io.netty.channel.ChannelDuplexHandler; |
|||
import io.netty.channel.ChannelHandlerContext; |
|||
import io.netty.channel.ChannelPromise; |
|||
|
|||
public class PacketHandler extends ChannelDuplexHandler { |
|||
private Player p; |
|||
|
|||
public PacketHandler(final Player p) { |
|||
this.p = p; |
|||
} |
|||
|
|||
// OUTPUT MANGLER
|
|||
@Override |
|||
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { |
|||
if (ClientPacket.hidePacket(p, ctx, msg, promise)) { |
|||
return; |
|||
} |
|||
super.write(ctx, msg, promise); |
|||
} |
|||
|
|||
// INPUT MANGLER
|
|||
@Override |
|||
public void channelRead(ChannelHandlerContext c, Object msg) throws Exception { |
|||
super.channelRead(c, msg); |
|||
} |
|||
} |
@ -0,0 +1,104 @@ |
|||
package cx.sfy.TheBridge.packets; |
|||
|
|||
import java.lang.reflect.Field; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.entity.Player; |
|||
|
|||
import io.netty.channel.Channel; |
|||
|
|||
public class PacketInjector { |
|||
private static Field channel; |
|||
private static Field networkManager; |
|||
private static Field playerConnection; |
|||
|
|||
public static void Enabler() { |
|||
try { |
|||
PacketInjector.playerConnection = Reflection.getClass("{nms}.EntityPlayer").getField("playerConnection"); |
|||
PacketInjector.networkManager = Reflection.getClass("{nms}.PlayerConnection").getField("networkManager"); |
|||
|
|||
PacketInjector.channel = Reflection.getClass("{nms}.NetworkManager").getField("channel"); |
|||
|
|||
PacketInjector.refreshSessions(); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
public static void Disabler() { |
|||
for (Player p : Bukkit.getOnlinePlayers()) { |
|||
removePlayer(p); |
|||
} |
|||
} |
|||
|
|||
public static void addPlayer(final Player p) { |
|||
if (p == null) { |
|||
return; |
|||
} |
|||
try { |
|||
final Channel channel = PacketInjector |
|||
.getChannel(PacketInjector.getNetworkManager(Reflection.getNmsPlayer(p))); |
|||
if (channel == null) { |
|||
return; |
|||
} |
|||
if (channel.pipeline().get("TheBridgePck") == null) { |
|||
final PacketHandler packetHandler = new PacketHandler(p); |
|||
channel.pipeline().addBefore("packet_handler", "TheBridgePck", packetHandler); |
|||
} |
|||
} catch (final Exception t) { |
|||
t.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
private static Channel getChannel(final Object networkManager) { |
|||
if (networkManager == null) { |
|||
return null; |
|||
} |
|||
Channel channel = null; |
|||
try { |
|||
channel = (Channel) PacketInjector.channel.get(networkManager); |
|||
} catch (final Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
return channel; |
|||
} |
|||
|
|||
private static Object getNetworkManager(final Object entityPlayer) { |
|||
if (entityPlayer == null) { |
|||
return null; |
|||
} |
|||
Object networkManager = null; |
|||
try { |
|||
networkManager = PacketInjector.networkManager.get(PacketInjector.playerConnection.get(entityPlayer)); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
return networkManager; |
|||
} |
|||
|
|||
public static void refreshSessions() { |
|||
for (final Player player : Bukkit.getOnlinePlayers()) { |
|||
PacketInjector.removePlayer(player); |
|||
PacketInjector.addPlayer(player); |
|||
} |
|||
} |
|||
|
|||
public static void removePlayer(final Player p) { |
|||
if (p == null) { |
|||
return; |
|||
} |
|||
try { |
|||
final Channel channel = PacketInjector |
|||
.getChannel(PacketInjector.getNetworkManager(Reflection.getNmsPlayer(p))); |
|||
if (channel == null) { |
|||
return; |
|||
} |
|||
if (channel.pipeline().get("LagAssistPck") != null) { |
|||
channel.pipeline().remove("LagAssistPck"); |
|||
} |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,33 @@ |
|||
package cx.sfy.TheBridge.packets; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.event.EventHandler; |
|||
import org.bukkit.event.EventPriority; |
|||
import org.bukkit.event.Listener; |
|||
import org.bukkit.event.player.PlayerJoinEvent; |
|||
import org.bukkit.event.player.PlayerQuitEvent; |
|||
import org.bukkit.plugin.Plugin; |
|||
|
|||
public class PacketMain implements Listener { |
|||
|
|||
public PacketMain(Plugin p) { |
|||
PacketInjector.Enabler(); |
|||
Reflection.Enabler(); |
|||
p.getServer().getPluginManager().registerEvents(this, p); |
|||
Bukkit.getLogger().info(" §e[§a✔§e] §fInjecting PacketListener."); |
|||
} |
|||
|
|||
@EventHandler(priority = EventPriority.LOWEST) |
|||
public void onJoin(PlayerJoinEvent e) { |
|||
Player p = e.getPlayer(); |
|||
PacketInjector.addPlayer(p); |
|||
} |
|||
|
|||
@EventHandler(priority = EventPriority.LOWEST) |
|||
public void onQuit(PlayerQuitEvent e) { |
|||
Player p = e.getPlayer(); |
|||
PacketInjector.removePlayer(p); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,332 @@ |
|||
package cx.sfy.TheBridge.packets; |
|||
|
|||
import java.lang.reflect.Constructor; |
|||
import java.lang.reflect.Field; |
|||
import java.lang.reflect.Method; |
|||
import java.util.Collection; |
|||
import java.util.List; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.Location; |
|||
import org.bukkit.World; |
|||
import org.bukkit.block.Block; |
|||
import org.bukkit.command.CommandMap; |
|||
import org.bukkit.command.PluginCommand; |
|||
import org.bukkit.entity.Entity; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.inventory.ItemStack; |
|||
import org.bukkit.inventory.meta.MapMeta; |
|||
import org.bukkit.plugin.Plugin; |
|||
import org.bukkit.plugin.SimplePluginManager; |
|||
import org.bukkit.scoreboard.Scoreboard; |
|||
import org.json.simple.JSONObject; |
|||
|
|||
import cx.sfy.TheBridge.utils.V1_8; |
|||
import net.md_5.bungee.api.ChatMessageType; |
|||
import net.md_5.bungee.api.chat.ComponentBuilder; |
|||
|
|||
public class Reflection { |
|||
|
|||
static String version = ServerPackage.getServerVersion(); |
|||
|
|||
public enum Classes { |
|||
|
|||
CraftWorld(), CraftBlock(), CraftPlayer(), Material(), MapMeta(), WorldServer(), PacketPlayOutTitle(), IChatBaseComponent(); |
|||
|
|||
private Class<?> type; |
|||
|
|||
public Class<?> getType() { |
|||
return type; |
|||
} |
|||
} |
|||
|
|||
public enum Methods { |
|||
|
|||
setMapId(), getMapId(), getPlayerHandle(), getBlockType(), getChunkProviderServer(), getIChatBaseComponent(); |
|||
|
|||
private Method mthd; |
|||
|
|||
public Method getMethod() { |
|||
return mthd; |
|||
} |
|||
} |
|||
|
|||
public static void Enabler() { |
|||
|
|||
// PUTTING CLASSES IN ENUM.
|
|||
Classes.CraftWorld.type = getClass("{cb}.CraftWorld"); |
|||
Classes.CraftBlock.type = getClass("{cb}.block.CraftBlock"); |
|||
Classes.CraftPlayer.type = getClass("{cb}.entity.CraftPlayer"); |
|||
Classes.Material.type = getClass("{b}.Material"); |
|||
Classes.MapMeta.type = getClass("{b}.inventory.meta.MapMeta"); |
|||
Classes.WorldServer.type = getClass("{nms}.WorldServer"); |
|||
Classes.IChatBaseComponent.type = getClass("{nms}.IChatBaseComponent"); |
|||
Classes.PacketPlayOutTitle.type = getClass("{nms}.PacketPlayOutTitle"); |
|||
|
|||
// PUTTING METHODS IN ENUM.
|
|||
Methods.setMapId.mthd = getMethod(Classes.MapMeta.getType(), "setMapId", int.class); |
|||
Methods.getMapId.mthd = getMethod(Classes.MapMeta.getType(), "getMapId"); |
|||
Methods.getPlayerHandle.mthd = getMethod(Classes.CraftPlayer.getType(), "getHandle"); |
|||
Methods.getBlockType.mthd = getMethod(Classes.CraftBlock.getType(), "getType"); |
|||
Methods.getChunkProviderServer.mthd = getMethod(Classes.WorldServer.getType(), "getChunkProviderServer"); |
|||
Methods.getIChatBaseComponent.mthd = getMethod(Classes.IChatBaseComponent.getType().getDeclaredClasses()[0], |
|||
"a", String.class); |
|||
} |
|||
|
|||
public static void sendAction(Player player, String s) { |
|||
if (Bukkit.getVersion().contains("1.8")) |
|||
V1_8.sendActionbar(player, s); |
|||
else |
|||
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, new ComponentBuilder(s).create()); |
|||
} |
|||
|
|||
public static void sendTitle(Player p, int fadein, int stay, int fadeout, String title, String subtitle) { |
|||
try { |
|||
final Object enumTitle = Classes.PacketPlayOutTitle.getType().getDeclaredClasses()[0].getField("TITLE") |
|||
.get(null); |
|||
final Object enumSubtitle = Classes.PacketPlayOutTitle.getType().getDeclaredClasses()[0] |
|||
.getField("SUBTITLE") |
|||
.get(null); |
|||
|
|||
final Object titlebase = runMethod(null, Methods.getIChatBaseComponent.getMethod(), |
|||
"{\"text\": \"" + title + "\"}"); |
|||
final Object subtitlebase = runMethod(null, Methods.getIChatBaseComponent.getMethod(), |
|||
"{\"text\": \"" + subtitle + "\"}"); |
|||
|
|||
final Class<?> packetcls = Classes.PacketPlayOutTitle.getType(); |
|||
final Constructor<?> constr = packetcls.getConstructor( |
|||
Classes.PacketPlayOutTitle.getType().getDeclaredClasses()[0], Classes.IChatBaseComponent.getType(), |
|||
int.class, int.class, int.class); |
|||
|
|||
final Object packetTitle = constr.newInstance(enumTitle, titlebase, fadein, stay, fadeout); |
|||
final Object packetSubtitle = constr.newInstance(enumSubtitle, subtitlebase, fadein, stay, fadeout); |
|||
|
|||
sendPlayerPacket(p, packetTitle); |
|||
sendPlayerPacket(p, packetSubtitle); |
|||
} |
|||
|
|||
catch (final Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
@SuppressWarnings("unchecked") |
|||
static JSONObject convert(String text) { |
|||
final JSONObject json = new JSONObject(); |
|||
json.put("text", text); |
|||
return json; |
|||
} |
|||
|
|||
public static Class<?> getClass(String classname) { |
|||
try { |
|||
final String path = classname.replace("{nms}", "net.minecraft.server." + version) |
|||
.replace("{nm}", "net.minecraft." + version).replace("{cb}", "org.bukkit.craftbukkit." + version) |
|||
.replace("{b}", "org.bukkit"); |
|||
return Class.forName(path); |
|||
} catch (final Exception e) { |
|||
e.printStackTrace(); |
|||
return null; |
|||
} |
|||
} |
|||
|
|||
public static Object getCraftWorld(World w) { |
|||
final Class<?> crwclass = Classes.CraftWorld.getType(); |
|||
System.out.println(crwclass.getName()); |
|||
final Object craftworld = crwclass.cast(w); |
|||
return craftworld; |
|||
} |
|||
|
|||
public static Object getWorldServer(Object craftWorld) { |
|||
try { |
|||
return getFieldValue(craftWorld, "world"); |
|||
} catch (final Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
public static Object getChunkProvider(Object worldServer) { |
|||
try { |
|||
return runMethod(worldServer, Methods.getChunkProviderServer.getMethod()); |
|||
} catch (final Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
public static boolean isTile(Block b) { |
|||
return !b.getState().getClass().getSimpleName().toLowerCase().contains("craftblockstate"); |
|||
} |
|||
|
|||
public static Entity getEntity(Location l) { |
|||
final Collection<Entity> ents = l.getWorld().getNearbyEntities(l, 1, 1, 1); |
|||
for (final Entity ent : ents) |
|||
return ent; |
|||
return null; |
|||
} |
|||
|
|||
public static void setmapId(ItemStack s, int id) { |
|||
final MapMeta mapm = (MapMeta) s.getItemMeta(); |
|||
try { |
|||
runMethod(mapm, Methods.setMapId.getMethod(), id); |
|||
} catch (final Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
s.setItemMeta(mapm); |
|||
} |
|||
|
|||
public static int getMapId(ItemStack s) { |
|||
final MapMeta mapm = (MapMeta) s.getItemMeta(); |
|||
try { |
|||
return (int) runMethod(mapm, Methods.getMapId.getMethod()); |
|||
} catch (final Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
return 0; |
|||
} |
|||
|
|||
public static Object getNmsPlayer(Player p) { |
|||
if (p == null) |
|||
return null; |
|||
Method getHandle; |
|||
try { |
|||
getHandle = p.getClass().getMethod("getHandle"); |
|||
return getHandle.invoke(p); |
|||
} catch (final Exception e) { |
|||
e.printStackTrace(); |
|||
return null; |
|||
} |
|||
} |
|||
|
|||
public static Object getNmsScoreboard(Scoreboard s) throws Exception { |
|||
final Method getHandle = s.getClass().getMethod("getHandle"); |
|||
return getHandle.invoke(s); |
|||
} |
|||
|
|||
public static Object getFieldValue(Object instance, String fieldName) throws Exception { |
|||
final Field field = instance.getClass().getDeclaredField(fieldName); |
|||
field.setAccessible(true); |
|||
return field.get(instance); |
|||
} |
|||
|
|||
@SuppressWarnings("unchecked") |
|||
public static <T> T getFieldValue(Field field, Object obj) { |
|||
try { |
|||
return (T) field.get(obj); |
|||
} catch (final Exception e) { |
|||
e.printStackTrace(); |
|||
return null; |
|||
} |
|||
} |
|||
|
|||
public static Field getField(Class<?> clazz, String fieldName) throws Exception { |
|||
final Field field = clazz.getDeclaredField(fieldName); |
|||
field.setAccessible(true); |
|||
return field; |
|||
} |
|||
|
|||
public static Method getMethod(Class<?> clazz, String methodName, Class<?>... resl) { |
|||
Method method; |
|||
try { |
|||
method = clazz.getDeclaredMethod(methodName, resl); |
|||
method.setAccessible(true); |
|||
return method; |
|||
} catch (final Exception e) { |
|||
return null; |
|||
} |
|||
} |
|||
|
|||
public static Object runMethod(Object obj, Method m, Object... resl) throws Exception { |
|||
return m.invoke(obj, resl); |
|||
} |
|||
|
|||
public static Object runMethod(Object obj, String name, Object... resl) throws Exception { |
|||
final Class<?>[] classes = new Class<?>[resl.length]; |
|||
for (int i = 0; i < resl.length; i++) |
|||
classes[i] = resl[i].getClass(); |
|||
return getMethod(obj.getClass(), name, classes).invoke(obj, resl); |
|||
} |
|||
|
|||
public static void setValue(Object instance, String field, Object value) { |
|||
try { |
|||
final Field f = instance.getClass().getDeclaredField(field); |
|||
f.setAccessible(true); |
|||
f.set(instance, value); |
|||
} catch (final Throwable t) { |
|||
t.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
public static void sendAllPacket(Object packet) throws Exception { |
|||
for (final Player p : Bukkit.getOnlinePlayers()) { |
|||
final Object nmsPlayer = getNmsPlayer(p); |
|||
final Object connection = nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer); |
|||
connection.getClass().getMethod("sendPacket", getClass("{nms}.Packet")).invoke(connection, packet); |
|||
} |
|||
} |
|||
|
|||
public static int getPing(Player p) { |
|||
try { |
|||
final Object entityPlayer = Methods.getPlayerHandle.getMethod().invoke(p); |
|||
return (int) getFieldValue(entityPlayer, "ping"); |
|||
} catch (final Exception e) { |
|||
return -1; |
|||
} |
|||
} |
|||
|
|||
public static void sendListPacket(List<String> players, Object packet) { |
|||
try { |
|||
for (final String name : players) { |
|||
final Object nmsPlayer = getNmsPlayer(Bukkit.getPlayer(name)); |
|||
final Object connection = nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer); |
|||
connection.getClass().getMethod("sendPacket", getClass("{nms}.Packet")).invoke(connection, packet); |
|||
} |
|||
} catch (final Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
public static void sendPlayerPacket(Player p, Object packet) throws Exception { |
|||
final Object nmsPlayer = getNmsPlayer(p); |
|||
final Object connection = nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer); |
|||
connection.getClass().getMethod("sendPacket", getClass("{nms}.Packet")).invoke(connection, packet); |
|||
} |
|||
|
|||
public static PluginCommand getCommand(String name, Plugin plugin) { |
|||
PluginCommand command = null; |
|||
|
|||
try { |
|||
final Constructor<PluginCommand> c = PluginCommand.class.getDeclaredConstructor(String.class, Plugin.class); |
|||
c.setAccessible(true); |
|||
|
|||
command = c.newInstance(name, plugin); |
|||
} catch (final Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
return command; |
|||
} |
|||
|
|||
public static CommandMap getCommandMap() { |
|||
CommandMap commandMap = null; |
|||
|
|||
try { |
|||
if (Bukkit.getPluginManager() instanceof SimplePluginManager) { |
|||
final Field f = SimplePluginManager.class.getDeclaredField("commandMap"); |
|||
f.setAccessible(true); |
|||
|
|||
commandMap = (CommandMap) f.get(Bukkit.getPluginManager()); |
|||
} |
|||
} catch (final NoSuchFieldException e) { |
|||
e.printStackTrace(); |
|||
} catch (final SecurityException e) { |
|||
e.printStackTrace(); |
|||
} catch (final IllegalArgumentException e) { |
|||
e.printStackTrace(); |
|||
} catch (final IllegalAccessException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
return commandMap; |
|||
} |
|||
} |
@ -0,0 +1,29 @@ |
|||
package cx.sfy.TheBridge.packets; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
|
|||
public enum ServerPackage { |
|||
|
|||
MINECRAFTSERVER("net.minecraft.server." + getServerVersion()), |
|||
CRAFTBUKKIT("org.bukkit.craftbukkit." + getServerVersion()), MINECRAFT("net.minecraft." + getServerVersion()); |
|||
|
|||
private final String path; |
|||
|
|||
ServerPackage(String path) { |
|||
this.path = path; |
|||
} |
|||
|
|||
public static String getServerVersion() { |
|||
return Bukkit.getServer().getClass().getPackage().getName().substring(23); |
|||
} |
|||
|
|||
@Override |
|||
public String toString() { |
|||
return path; |
|||
} |
|||
|
|||
public Class<?> getClass(String className) throws ClassNotFoundException { |
|||
return Class.forName(this.toString() + "." + className); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,43 @@ |
|||
package cx.sfy.TheBridge.signs; |
|||
|
|||
import org.bukkit.Location; |
|||
import org.bukkit.block.Block; |
|||
import org.bukkit.block.Sign; |
|||
|
|||
public class GameFourSign { |
|||
|
|||
private Sign sign; |
|||
private String game; |
|||
private Block retract; |
|||
|
|||
public GameFourSign(Location loc, String game, Block retract) { |
|||
setSign((Sign)loc.getBlock().getState()); |
|||
setGame(game); |
|||
setRetract(retract); |
|||
} |
|||
|
|||
public Sign getSign() { |
|||
return sign; |
|||
} |
|||
|
|||
public void setSign(Sign sign) { |
|||
this.sign = sign; |
|||
} |
|||
|
|||
public String getGame() { |
|||
return game; |
|||
} |
|||
|
|||
public void setGame(String game) { |
|||
this.game = game; |
|||
} |
|||
|
|||
public Block getRetract() { |
|||
return retract; |
|||
} |
|||
|
|||
public void setRetract(Block retract) { |
|||
this.retract = retract; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,43 @@ |
|||
package cx.sfy.TheBridge.signs; |
|||
|
|||
import org.bukkit.Location; |
|||
import org.bukkit.block.Block; |
|||
import org.bukkit.block.Sign; |
|||
|
|||
public class GameNormalSign { |
|||
|
|||
private Sign sign; |
|||
private String game; |
|||
private Block retract; |
|||
|
|||
public GameNormalSign(Location loc, String game, Block retract) { |
|||
setSign((Sign)loc.getBlock().getState()); |
|||
setGame(game); |
|||
setRetract(retract); |
|||
} |
|||
|
|||
public Sign getSign() { |
|||
return sign; |
|||
} |
|||
|
|||
public void setSign(Sign sign) { |
|||
this.sign = sign; |
|||
} |
|||
|
|||
public String getGame() { |
|||
return game; |
|||
} |
|||
|
|||
public void setGame(String game) { |
|||
this.game = game; |
|||
} |
|||
|
|||
public Block getRetract() { |
|||
return retract; |
|||
} |
|||
|
|||
public void setRetract(Block retract) { |
|||
this.retract = retract; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,180 @@ |
|||
package cx.sfy.TheBridge.team; |
|||
|
|||
import org.bukkit.ChatColor; |
|||
import org.bukkit.Color; |
|||
import org.bukkit.Location; |
|||
import org.bukkit.Material; |
|||
import org.bukkit.entity.Player; |
|||
|
|||
import com.boydti.fawe.util.TaskManager; |
|||
import com.sk89q.worldedit.EditSession; |
|||
import com.sk89q.worldedit.Vector; |
|||
import com.sk89q.worldedit.bukkit.BukkitWorld; |
|||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat; |
|||
import com.sk89q.worldedit.math.transform.Transform; |
|||
|
|||
import cx.sfy.TheBridge.cosmetics.cages.Cage; |
|||
|
|||
import java.io.IOException; |
|||
import java.util.ArrayList; |
|||
|
|||
public class Team { |
|||
|
|||
private ArrayList<Player> players; |
|||
private ArrayList<Location> portal; |
|||
private Location hologram; |
|||
private Location spawn; |
|||
private Location respawn; |
|||
private String teamName; |
|||
private ChatColor color; |
|||
private Color fcolor; |
|||
private int goals; |
|||
private boolean cage; |
|||
private EditSession editSessionRed; |
|||
private EditSession editSessionBlue; |
|||
private Cage cages; |
|||
|
|||
public Team(String teamName, ChatColor color, Color fcolor, Location respawn, Location spawn, ArrayList<Location> portal, Location hologram) { |
|||
this.color = color; |
|||
this.teamName = teamName; |
|||
this.players = new ArrayList<Player>(); |
|||
this.goals = 0; |
|||
this.spawn = spawn; |
|||
this.respawn = respawn; |
|||
this.portal = portal; |
|||
this.fcolor = fcolor; |
|||
this.hologram = hologram; |
|||
this.cage = false; |
|||
} |
|||
|
|||
public void createCage(Cage cage) { |
|||
cages = cage; |
|||
if (color.equals(ChatColor.RED)) { |
|||
Vector to = new Vector(spawn.getBlockX(), spawn.getBlockY(), spawn.getBlockZ()); |
|||
BukkitWorld world = new BukkitWorld(spawn.getWorld()); |
|||
TaskManager.IMP.async(new Runnable() { |
|||
@Override |
|||
public void run() { |
|||
try { |
|||
editSessionRed = ClipboardFormat.findByFile(cage.getFileRed()).load(cage.getFileRed()).paste(world, to, true, true, (Transform) null); |
|||
editSessionRed.flushQueue(); |
|||
} catch (IOException e) { |
|||
// TODO Auto-generated catch block
|
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
}); |
|||
} |
|||
if (color.equals(ChatColor.BLUE)) { |
|||
Vector to = new Vector(spawn.getBlockX(), spawn.getBlockY(), spawn.getBlockZ()); |
|||
BukkitWorld world = new BukkitWorld(spawn.getWorld()); |
|||
TaskManager.IMP.async(new Runnable() { |
|||
@Override |
|||
public void run() { |
|||
try { |
|||
editSessionBlue = ClipboardFormat.findByFile(cage.getFileBlue()).load(cage.getFileBlue()).paste(world, to, true, true, (Transform) null); |
|||
editSessionBlue.flushQueue(); |
|||
} catch (IOException e) { |
|||
// TODO Auto-generated catch block
|
|||
e.printStackTrace(); |
|||
} |
|||
editSessionBlue.flushQueue(); |
|||
} |
|||
}); |
|||
} |
|||
} |
|||
|
|||
public void removeCage() { |
|||
Vector to = new Vector(spawn.getBlockX(), spawn.getBlockY(), spawn.getBlockZ()); |
|||
BukkitWorld world = new BukkitWorld(spawn.getWorld()); |
|||
TaskManager.IMP.async(new Runnable() { |
|||
@Override |
|||
public void run() { |
|||
try { |
|||
editSessionBlue = ClipboardFormat.findByFile(cages.getClear()).load(cages.getClear()).paste(world, to, true, true, (Transform) null); |
|||
} catch (IOException e) { |
|||
// TODO Auto-generated catch block
|
|||
e.printStackTrace(); |
|||
} |
|||
editSessionBlue.flushQueue(); |
|||
} |
|||
}); |
|||
} |
|||
|
|||
public boolean isCage() { |
|||
return cage; |
|||
} |
|||
|
|||
public void setCage(boolean cage) { |
|||
this.cage = cage; |
|||
} |
|||
|
|||
public Location getHologram() { |
|||
return hologram; |
|||
} |
|||
|
|||
public String getTeamName() { |
|||
return teamName; |
|||
} |
|||
|
|||
public ChatColor getColor() { |
|||
return color; |
|||
} |
|||
|
|||
public Location getTeamSpawn() { |
|||
return spawn; |
|||
} |
|||
|
|||
public Location getTeamRespawn() { |
|||
return respawn; |
|||
} |
|||
|
|||
public Color getFColor() { |
|||
return fcolor; |
|||
} |
|||
|
|||
public ArrayList<Location> getPortal() { |
|||
return portal; |
|||
} |
|||
|
|||
public void createPortal() { |
|||
for (Location loc : portal) { |
|||
loc.getBlock().setType(Material.ENDER_PORTAL); |
|||
} |
|||
} |
|||
|
|||
public void deletePortal() { |
|||
for (Location loc : portal) { |
|||
loc.getBlock().setType(Material.AIR); |
|||
} |
|||
} |
|||
|
|||
public void addGoal() { |
|||
this.goals = this.goals + 1; |
|||
} |
|||
|
|||
public int getGoals() { |
|||
return goals; |
|||
} |
|||
|
|||
public void addPlayer(Player p) { |
|||
if (!players.contains(p)) { |
|||
players.add(p); |
|||
} |
|||
} |
|||
|
|||
public void removePlayer(Player p) { |
|||
if (players.contains(p)) { |
|||
players.remove(p); |
|||
} |
|||
} |
|||
|
|||
public ArrayList<Player> getTeamPlayers() { |
|||
return players; |
|||
} |
|||
|
|||
public int getTeamSize() { |
|||
return players.size(); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,247 @@ |
|||
package cx.sfy.TheBridge.team; |
|||
|
|||
import org.bukkit.ChatColor; |
|||
import org.bukkit.Color; |
|||
import org.bukkit.Location; |
|||
import org.bukkit.Material; |
|||
import org.bukkit.Sound; |
|||
import org.bukkit.entity.Player; |
|||
|
|||
import com.sk89q.worldedit.EditSession; |
|||
import com.sk89q.worldedit.Vector; |
|||
import com.sk89q.worldedit.bukkit.BukkitWorld; |
|||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat; |
|||
import com.sk89q.worldedit.math.transform.Transform; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
import cx.sfy.TheBridge.cosmetics.cages.Cage; |
|||
import cx.sfy.TheBridge.game.GameFour; |
|||
import cx.sfy.TheBridge.game.GameFour.FState; |
|||
|
|||
import java.io.IOException; |
|||
import java.util.ArrayList; |
|||
|
|||
public class TeamFour { |
|||
|
|||
private ArrayList<Player> players; |
|||
private ArrayList<Location> portal; |
|||
private Location hologram; |
|||
private Location teamSpawn; |
|||
private Location teamRespawn; |
|||
private int life; |
|||
private boolean death; |
|||
private GameFour game; |
|||
private ChatColor color; |
|||
private Color fcolor; |
|||
private String teamName; |
|||
private String ally; |
|||
private boolean cage; |
|||
private EditSession editSessionRed; |
|||
private EditSession editSessionBlue; |
|||
private EditSession editSessionYellow; |
|||
private EditSession editSessionGreen; |
|||
private Cage cages; |
|||
|
|||
public TeamFour(GameFour game, ChatColor color, Color fcolor, String teamName, Location teamSpawn, Location teamRespawn, ArrayList<Location> portal, Location hologram) { |
|||
this.players = new ArrayList<Player>(); |
|||
this.life = 2; |
|||
this.game = game; |
|||
this.fcolor = fcolor; |
|||
this.death = false; |
|||
this.teamSpawn = teamSpawn; |
|||
this.teamRespawn = teamRespawn; |
|||
this.portal = portal; |
|||
this.color = color; |
|||
this.teamName = teamName; |
|||
this.hologram = hologram; |
|||
this.ally = teamName.substring(0, 1); |
|||
this.cage = false; |
|||
} |
|||
|
|||
public void createCage(Cage cage) { |
|||
cages = cage; |
|||
if (color.equals(ChatColor.RED)) { |
|||
Vector to = new Vector(teamSpawn.getBlockX(), teamSpawn.getBlockY(), teamSpawn.getBlockZ()); |
|||
BukkitWorld world = new BukkitWorld(teamSpawn.getWorld()); |
|||
try { |
|||
editSessionRed = ClipboardFormat.findByFile(cage.getFileRed()).load(cage.getFileRed()).paste(world, to, true, true, (Transform) null); |
|||
editSessionRed.flushQueue(); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
if (color.equals(ChatColor.BLUE)) { |
|||
Vector to = new Vector(teamSpawn.getBlockX(), teamSpawn.getBlockY(), teamSpawn.getBlockZ()); |
|||
BukkitWorld world = new BukkitWorld(teamSpawn.getWorld()); |
|||
try { |
|||
editSessionBlue = ClipboardFormat.findByFile(cage.getFileBlue()).load(cage.getFileBlue()).paste(world, to, true, true, (Transform) null); |
|||
editSessionBlue.flushQueue(); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
if (color.equals(ChatColor.YELLOW)) { |
|||
Vector to = new Vector(teamSpawn.getBlockX(), teamSpawn.getBlockY(), teamSpawn.getBlockZ()); |
|||
BukkitWorld world = new BukkitWorld(teamSpawn.getWorld()); |
|||
try { |
|||
editSessionYellow = ClipboardFormat.findByFile(cage.getFileYellow()).load(cage.getFileYellow()).paste(world, to, true, true, (Transform) null); |
|||
editSessionYellow.flushQueue(); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
if (color.equals(ChatColor.GREEN)) { |
|||
Vector to = new Vector(teamSpawn.getBlockX(), teamSpawn.getBlockY(), teamSpawn.getBlockZ()); |
|||
BukkitWorld world = new BukkitWorld(teamSpawn.getWorld()); |
|||
try { |
|||
editSessionGreen = ClipboardFormat.findByFile(cage.getFileGreen()).load(cage.getFileGreen()).paste(world, to, true, true, (Transform) null); |
|||
editSessionGreen.flushQueue(); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
} |
|||
|
|||
public void removeCage() { |
|||
Vector to = new Vector(teamSpawn.getBlockX(), teamSpawn.getBlockY(), teamSpawn.getBlockZ()); |
|||
BukkitWorld world = new BukkitWorld(teamSpawn.getWorld()); |
|||
try { |
|||
editSessionBlue = ClipboardFormat.findByFile(cages.getClear()).load(cages.getClear()).paste(world, to, true, true, (Transform) null); |
|||
editSessionBlue.flushQueue(); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
public boolean isCage() { |
|||
return cage; |
|||
} |
|||
|
|||
public void setCage(boolean cage) { |
|||
this.cage = cage; |
|||
} |
|||
|
|||
public Location getHologram() { |
|||
return hologram; |
|||
} |
|||
|
|||
public ArrayList<Location> getPortal() { |
|||
return portal; |
|||
} |
|||
|
|||
public void setPortal(ArrayList<Location> portal) { |
|||
this.portal = portal; |
|||
} |
|||
|
|||
public ChatColor getColor() { |
|||
return this.color; |
|||
} |
|||
|
|||
public Color getFColor() { |
|||
return this.fcolor; |
|||
} |
|||
|
|||
public String getTeamName() { |
|||
return color + this.teamName; |
|||
} |
|||
|
|||
public String getAlly() { |
|||
return color + this.ally; |
|||
} |
|||
|
|||
public void createPortal() { |
|||
for (Location loc : portal) { |
|||
loc.getBlock().setType(Material.ENDER_PORTAL); |
|||
} |
|||
} |
|||
|
|||
public void deletePortal() { |
|||
for (Location loc : portal) { |
|||
loc.getBlock().setType(Material.AIR); |
|||
} |
|||
} |
|||
|
|||
public void addPlayer(Player p) { |
|||
if (!players.contains(p)) { |
|||
players.add(p); |
|||
} |
|||
} |
|||
|
|||
public void removePlayer(Player p) { |
|||
if (players.contains(p)) { |
|||
players.remove(p); |
|||
} |
|||
if (players.size() == 0 && game.isState(FState.INGAME) && game.isState(FState.PREGAME)) { |
|||
killTeam(); |
|||
} |
|||
} |
|||
|
|||
public void killTeam() { |
|||
setDeath(true); |
|||
ArrayList<Player> temp = new ArrayList<Player>(); |
|||
for (Player p : players) { |
|||
p.playSound(p.getLocation(), Sound.valueOf(Main.get().getSounds().get("sounds.teamFour.death")), 1.0f, 1.0f); |
|||
for (Player on : game.getPlayers()) { |
|||
on.sendMessage(Main.get().getLang().get("messages.eliminated").replaceAll("<color>", "" + color).replaceAll("<player>", p.getName())); |
|||
} |
|||
temp.add(p); |
|||
} |
|||
players.clear(); |
|||
for (Player p : temp) { |
|||
game.setSpect(p); |
|||
} |
|||
} |
|||
|
|||
public void addLife(int life) { |
|||
this.life = this.life + life; |
|||
} |
|||
|
|||
public void removeLife(int life) { |
|||
this.life = this.life - life; |
|||
} |
|||
|
|||
public boolean getDeath() { |
|||
return this.death; |
|||
} |
|||
|
|||
public void setDeath(boolean b) { |
|||
this.death = b; |
|||
} |
|||
|
|||
public String getLifeString() { |
|||
if (getDeath()) { |
|||
return "§8❤❤❤❤❤❤❤❤"; |
|||
} |
|||
String c = ""; |
|||
String r = ""; |
|||
for (int i = 0; i < life; i++) { |
|||
c = c + "❤"; |
|||
} |
|||
for (int i = life; i < 8; i++) { |
|||
r = r + "❤"; |
|||
} |
|||
String li = color + c + "§7" + r; |
|||
return li; |
|||
} |
|||
|
|||
public int getLife() { |
|||
return this.life; |
|||
} |
|||
|
|||
public ArrayList<Player> getTeamPlayers() { |
|||
return players; |
|||
} |
|||
|
|||
public int getTeamSize() { |
|||
return players.size(); |
|||
} |
|||
|
|||
public Location getTeamSpawn() { |
|||
return teamSpawn; |
|||
} |
|||
|
|||
public Location getTeamRespawn() { |
|||
return teamRespawn; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,12 @@ |
|||
package cx.sfy.TheBridge.tops; |
|||
|
|||
public enum BoardType { |
|||
|
|||
NORMAL_KILLS, |
|||
NORMAL_WINS, |
|||
NORMAL_GOALS, |
|||
FOUR_KILLS, |
|||
FOUR_WINS, |
|||
FOUR_GOALS; |
|||
|
|||
} |
@ -0,0 +1,36 @@ |
|||
package cx.sfy.TheBridge.tops; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
|
|||
public class Top { |
|||
|
|||
private BoardType type; |
|||
private int amount; |
|||
private int top; |
|||
private String name; |
|||
|
|||
public Top(String name, int amount, BoardType type) { |
|||
this.type = type; |
|||
this.amount = amount; |
|||
this.name = name; |
|||
this.top = Main.get().getTOP().getTopNumber(this); |
|||
Main.get().getTOP().addTop(this); |
|||
} |
|||
|
|||
public BoardType getType() { |
|||
return type; |
|||
} |
|||
|
|||
public int getTop() { |
|||
return top; |
|||
} |
|||
|
|||
public int getAmount() { |
|||
return amount; |
|||
} |
|||
|
|||
public String getName() { |
|||
return name; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,165 @@ |
|||
package cx.sfy.TheBridge.utils; |
|||
|
|||
import org.bukkit.ChatColor; |
|||
import org.bukkit.command.CommandSender; |
|||
import org.bukkit.entity.Player; |
|||
|
|||
public class CenterMessage { |
|||
public static void sendCenteredMessage(Player player, String string) { |
|||
Object object; |
|||
if (string == null || string.equals("")) { |
|||
player.sendMessage(""); |
|||
} |
|||
string = ChatColor.translateAlternateColorCodes((char) '&', (String) string); |
|||
int n = 0; |
|||
boolean bl = false; |
|||
boolean bl2 = false; |
|||
for (int n2 : string.toCharArray()) { |
|||
if (n2 == 167) { |
|||
bl = true; |
|||
continue; |
|||
} |
|||
if (bl) { |
|||
bl = false; |
|||
if (n2 == 108 || n2 == 76) { |
|||
bl2 = true; |
|||
continue; |
|||
} |
|||
bl2 = false; |
|||
continue; |
|||
} |
|||
object = DefaultFontInfo.getDefaultFontInfo((char) n2); |
|||
n += bl2 ? ((DefaultFontInfo) object).getBoldLength() : ((DefaultFontInfo) object).getLength(); |
|||
++n; |
|||
} |
|||
int n3 = n / 2; |
|||
int n4 = 154 - n3; |
|||
int n5 = DefaultFontInfo.SPACE.getLength() + 1; |
|||
object = new StringBuilder(); |
|||
for (int n2 = 0; n2 < n4; n2 += n5) { |
|||
((StringBuilder) object).append(" "); |
|||
} |
|||
player.sendMessage(object.toString() + string); |
|||
} |
|||
|
|||
public static void sendCenteredMessage(CommandSender commandSender, String string) { |
|||
Object object; |
|||
if (string == null || string.equals("")) { |
|||
commandSender.sendMessage(""); |
|||
} |
|||
string = ChatColor.translateAlternateColorCodes((char) '&', (String) string); |
|||
int n = 0; |
|||
boolean bl = false; |
|||
boolean bl2 = false; |
|||
for (int n2 : string.toCharArray()) { |
|||
if (n2 == 167) { |
|||
bl = true; |
|||
continue; |
|||
} |
|||
if (bl) { |
|||
bl = false; |
|||
if (n2 == 108 || n2 == 76) { |
|||
bl2 = true; |
|||
continue; |
|||
} |
|||
bl2 = false; |
|||
continue; |
|||
} |
|||
object = DefaultFontInfo.getDefaultFontInfo((char) n2); |
|||
n += bl2 ? ((DefaultFontInfo) object).getBoldLength() : ((DefaultFontInfo) object).getLength(); |
|||
++n; |
|||
} |
|||
int n3 = n / 2; |
|||
int n4 = 154 - n3; |
|||
int n5 = DefaultFontInfo.SPACE.getLength() + 1; |
|||
object = new StringBuilder(); |
|||
for (int n2 = 0; n2 < n4; n2 += n5) { |
|||
((StringBuilder) object).append(" "); |
|||
} |
|||
commandSender.sendMessage(object.toString() + string); |
|||
} |
|||
|
|||
public static String getCenteredMessage(String string) { |
|||
Object object; |
|||
if (string == null || string.equals("")) { |
|||
string = ChatColor.translateAlternateColorCodes((char) '&', (String) string); |
|||
} |
|||
int n = 0; |
|||
boolean bl = false; |
|||
boolean bl2 = false; |
|||
for (int n2 : string.toCharArray()) { |
|||
if (n2 == 167) { |
|||
bl = true; |
|||
continue; |
|||
} |
|||
if (bl) { |
|||
bl = false; |
|||
if (n2 == 108 || n2 == 76) { |
|||
bl2 = true; |
|||
continue; |
|||
} |
|||
bl2 = false; |
|||
continue; |
|||
} |
|||
object = DefaultFontInfo.getDefaultFontInfo((char) n2); |
|||
n += bl2 ? ((DefaultFontInfo) object).getBoldLength() : ((DefaultFontInfo) object).getLength(); |
|||
++n; |
|||
} |
|||
int n3 = n / 2; |
|||
int n4 = 154 - n3; |
|||
int n5 = DefaultFontInfo.SPACE.getLength() + 1; |
|||
object = new StringBuilder(); |
|||
for (int n2 = 0; n2 < n4; n2 += n5) { |
|||
((StringBuilder) object).append(" "); |
|||
} |
|||
return object.toString() + string; |
|||
} |
|||
|
|||
public static enum DefaultFontInfo { |
|||
A('A', 5), a('a', 5), B('B', 5), b('b', 5), C('C', 5), c('c', 5), D('D', 5), d('d', 5), E('E', 5), e('e', 5), |
|||
F('F', 5), f('f', 4), G('G', 5), g('g', 5), H('H', 5), h('h', 5), I('I', 3), i('i', 1), J('J', 5), j('j', 5), |
|||
K('K', 5), k('k', 4), L('L', 5), l('l', 1), M('M', 5), m('m', 5), N('N', 5), n('n', 5), O('O', 5), o('o', 5), |
|||
P('P', 5), p('p', 5), Q('Q', 5), q('q', 5), R('R', 5), r('r', 5), S('S', 5), s('s', 5), T('T', 5), t('t', 4), |
|||
U('U', 5), u('u', 5), V('V', 5), v('v', 5), W('W', 5), w('w', 5), X('X', 5), x('x', 5), Y('Y', 5), y('y', 5), |
|||
Z('Z', 5), z('z', 5), NUM_1('1', 5), NUM_2('2', 5), NUM_3('3', 5), NUM_4('4', 5), NUM_5('5', 5), NUM_6('6', 5), |
|||
NUM_7('7', 5), NUM_8('8', 5), NUM_9('9', 5), NUM_0('0', 5), EXCLAMATION_POINT('!', 1), AT_SYMBOL('@', 6), |
|||
NUM_SIGN('#', 5), DOLLAR_SIGN('$', 5), PERCENT('%', 5), UP_ARROW('^', 5), AMPERSAND('&', 5), ASTERISK('*', 5), |
|||
LEFT_PARENTHESIS('(', 4), RIGHT_PERENTHESIS(')', 4), MINUS('-', 5), UNDERSCORE('_', 5), PLUS_SIGN('+', 5), |
|||
EQUALS_SIGN('=', 5), LEFT_CURL_BRACE('{', 4), RIGHT_CURL_BRACE('}', 4), LEFT_BRACKET('[', 3), |
|||
RIGHT_BRACKET(']', 3), COLON(':', 1), SEMI_COLON(';', 1), DOUBLE_QUOTE('\"', 3), SINGLE_QUOTE('\'', 1), |
|||
LEFT_ARROW('<', 4), RIGHT_ARROW('>', 4), QUESTION_MARK('?', 5), SLASH('/', 5), BACK_SLASH('\\', 5), |
|||
LINE('|', 1), TILDE('~', 5), TICK('`', 2), PERIOD('.', 1), COMMA(',', 1), SPACE(' ', 3), DEFAULT('a', 4); |
|||
|
|||
private char character; |
|||
private int length; |
|||
|
|||
private DefaultFontInfo(char c, int n2) { |
|||
this.character = c; |
|||
this.length = n2; |
|||
} |
|||
|
|||
public char getCharacter() { |
|||
return this.character; |
|||
} |
|||
|
|||
public int getLength() { |
|||
return this.length; |
|||
} |
|||
|
|||
public int getBoldLength() { |
|||
if (this == SPACE) { |
|||
return this.getLength(); |
|||
} |
|||
return this.length + 1; |
|||
} |
|||
|
|||
public static DefaultFontInfo getDefaultFontInfo(char c) { |
|||
for (DefaultFontInfo defaultFontInfo : DefaultFontInfo.values()) { |
|||
if (defaultFontInfo.getCharacter() != c) |
|||
continue; |
|||
return defaultFontInfo; |
|||
} |
|||
return DEFAULT; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,30 @@ |
|||
package cx.sfy.TheBridge.utils; |
|||
|
|||
import net.md_5.bungee.api.chat.ClickEvent; |
|||
import net.md_5.bungee.api.chat.ComponentBuilder; |
|||
import net.md_5.bungee.api.chat.HoverEvent; |
|||
import net.md_5.bungee.api.chat.TextComponent; |
|||
|
|||
public class Chat { |
|||
|
|||
public static TextComponent genHoverAndSuggestTextComponent(String show, String hover, String click) { |
|||
TextComponent msg = new TextComponent(show); |
|||
msg.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(hover).create())); |
|||
msg.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/" + click)); |
|||
return msg; |
|||
} |
|||
|
|||
public static TextComponent genHoverAndRunCommandTextComponent(String show, String hover, String click) { |
|||
TextComponent msg = new TextComponent(show); |
|||
msg.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(hover).create())); |
|||
msg.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/" + click)); |
|||
return msg; |
|||
} |
|||
|
|||
public static TextComponent genHoverTextComponent(String show, String hover) { |
|||
TextComponent msg = new TextComponent(show); |
|||
msg.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(hover).create())); |
|||
return msg; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,73 @@ |
|||
package cx.sfy.TheBridge.utils; |
|||
|
|||
import java.io.ByteArrayInputStream; |
|||
import java.io.ByteArrayOutputStream; |
|||
import java.io.IOException; |
|||
import java.io.ObjectInputStream; |
|||
import java.io.ObjectOutputStream; |
|||
import java.util.HashMap; |
|||
|
|||
import org.bukkit.util.io.BukkitObjectInputStream; |
|||
import org.bukkit.util.io.BukkitObjectOutputStream; |
|||
import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder; |
|||
|
|||
public class ConvertBase64 { |
|||
|
|||
private static HashMap<String, String> data = new HashMap<String, String>(); |
|||
|
|||
public static HashMap<String, String> getDataVoid() { |
|||
data.clear(); |
|||
data.put("fly", "0"); |
|||
data.put("jump", "0"); |
|||
data.put("chat", "0"); |
|||
data.put("visible", "0"); |
|||
data.put("ride", "0"); |
|||
data.put("speed", "0"); |
|||
data.put("row", "0"); |
|||
return data; |
|||
} |
|||
|
|||
public static String convertToBase64(HashMap<String, String> data) throws IOException { |
|||
ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); |
|||
ObjectOutputStream out = new ObjectOutputStream(byteOut); |
|||
out.writeObject(data); |
|||
out.close(); |
|||
return Base64Coder.encodeLines(byteOut.toByteArray()); |
|||
} |
|||
|
|||
public static HashMap<String, String> getDataFromBase64(String data) throws ClassNotFoundException, IOException{ |
|||
ByteArrayInputStream byteIn = new ByteArrayInputStream(Base64Coder.decodeLines(data)); |
|||
ObjectInputStream in = new ObjectInputStream(byteIn); |
|||
@SuppressWarnings("unchecked") |
|||
HashMap<String, String> data2 = (HashMap<String, String>) in.readObject(); |
|||
in.close(); |
|||
return data2; |
|||
} |
|||
|
|||
public static String toBase64(Object object) throws IllegalStateException { |
|||
try { |
|||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); |
|||
BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream); |
|||
|
|||
dataOutput.writeObject(object); |
|||
|
|||
dataOutput.close(); |
|||
return Base64Coder.encodeLines(outputStream.toByteArray()); |
|||
} catch (Exception e) { |
|||
throw new IllegalStateException("Unable to save item stacks.", e); |
|||
} |
|||
} |
|||
|
|||
public static Object fromBase64(String data) throws IOException { |
|||
try { |
|||
ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64Coder.decodeLines(data)); |
|||
BukkitObjectInputStream dataInput = new BukkitObjectInputStream(inputStream); |
|||
Object object = dataInput.readObject(); |
|||
dataInput.close(); |
|||
return object; |
|||
} catch (ClassNotFoundException e) { |
|||
throw new IOException("Unable to decode class type.", e); |
|||
} |
|||
} |
|||
|
|||
} |
@ -0,0 +1,189 @@ |
|||
package cx.sfy.TheBridge.utils; |
|||
|
|||
import java.lang.reflect.Field; |
|||
import java.util.ArrayList; |
|||
import java.util.Arrays; |
|||
import java.util.List; |
|||
import java.util.UUID; |
|||
|
|||
import org.apache.commons.codec.binary.Base64; |
|||
import org.bukkit.Material; |
|||
import org.bukkit.enchantments.Enchantment; |
|||
import org.bukkit.inventory.ItemStack; |
|||
import org.bukkit.inventory.meta.ItemMeta; |
|||
import org.bukkit.inventory.meta.SkullMeta; |
|||
|
|||
import com.mojang.authlib.GameProfile; |
|||
import com.mojang.authlib.properties.Property; |
|||
|
|||
public class ItemBuilder { |
|||
|
|||
public static ItemStack item(Material material, String displayName, String s) { |
|||
final ItemStack itemStack = new ItemStack(material); |
|||
final ItemMeta itemMeta = itemStack.getItemMeta(); |
|||
itemMeta.setDisplayName(displayName); |
|||
itemMeta.setLore(s.isEmpty() ? new ArrayList<String>() : Arrays.asList(s.split("\\n"))); |
|||
itemStack.setItemMeta(itemMeta); |
|||
return itemStack; |
|||
} |
|||
|
|||
public static ItemStack item(Material material, int n, short n2, String displayName, String s) { |
|||
final ItemStack itemStack = new ItemStack(material, n, n2); |
|||
final ItemMeta itemMeta = itemStack.getItemMeta(); |
|||
itemMeta.setDisplayName(displayName); |
|||
itemMeta.setLore(s.isEmpty() ? new ArrayList<String>() : Arrays.asList(s.split("\\n"))); |
|||
itemStack.setItemMeta(itemMeta); |
|||
return itemStack; |
|||
} |
|||
|
|||
public static ItemStack item(Material material, int n, short n2, String displayName, String s, Enchantment enchant, int level) { |
|||
final ItemStack itemStack = new ItemStack(material, n, n2); |
|||
final ItemMeta itemMeta = itemStack.getItemMeta(); |
|||
itemMeta.setDisplayName(displayName); |
|||
itemMeta.addEnchant(enchant, level, true); |
|||
itemMeta.setLore(s.isEmpty() ? new ArrayList<String>() : Arrays.asList(s.split("\\n"))); |
|||
itemStack.setItemMeta(itemMeta); |
|||
return itemStack; |
|||
} |
|||
|
|||
public static ItemStack item(Material material, int n, short n2, String displayName, List<String> s) { |
|||
final ItemStack itemStack = new ItemStack(material, n, n2); |
|||
final ItemMeta itemMeta = itemStack.getItemMeta(); |
|||
itemMeta.setDisplayName(displayName); |
|||
itemMeta.setLore(s); |
|||
itemStack.setItemMeta(itemMeta); |
|||
return itemStack; |
|||
} |
|||
|
|||
public static ItemStack item(Material material, int n, short n2, String displayName, List<String> s, Enchantment enchant, int level) { |
|||
final ItemStack itemStack = new ItemStack(material, n, n2); |
|||
final ItemMeta itemMeta = itemStack.getItemMeta(); |
|||
itemMeta.setDisplayName(displayName); |
|||
itemMeta.setLore(s); |
|||
itemMeta.addEnchant(enchant, level, true); |
|||
itemStack.setItemMeta(itemMeta); |
|||
return itemStack; |
|||
} |
|||
|
|||
public static ItemStack skull(Material material, int n, short n2, String displayName, String s, String owner) { |
|||
final ItemStack itemStack = new ItemStack(material, n, n2); |
|||
final SkullMeta skullMeta = (SkullMeta)itemStack.getItemMeta(); |
|||
skullMeta.setOwner(owner); |
|||
skullMeta.setDisplayName(displayName); |
|||
skullMeta.setLore(s.isEmpty() ? new ArrayList<String>() : Arrays.asList(s.split("\\n"))); |
|||
itemStack.setItemMeta(skullMeta); |
|||
return itemStack; |
|||
} |
|||
|
|||
public static ItemStack createSkull(Material material, int n, short n2, String displayName, String s, String uri){ |
|||
if (!uri.startsWith("http://textures.minecraft.net/texture/")) |
|||
uri = "http://textures.minecraft.net/texture/" + uri; |
|||
final ItemStack head = new ItemStack(material, n, n2); |
|||
final SkullMeta skullMeta = (SkullMeta)head.getItemMeta(); |
|||
skullMeta.setDisplayName(displayName); |
|||
skullMeta.setLore(s.isEmpty() ? new ArrayList<String>() : Arrays.asList(s.split("\\n"))); |
|||
if (uri.isEmpty()) |
|||
return head; |
|||
final GameProfile profile = new GameProfile(UUID.randomUUID(), null); |
|||
final byte[] encodedData = Base64.encodeBase64(String.format("{textures:{SKIN:{url:\"%s\"}}}", uri).getBytes()); |
|||
profile.getProperties().put("textures", new Property("textures", new String(encodedData))); |
|||
try { |
|||
final Field profileField = skullMeta.getClass().getDeclaredField("profile"); |
|||
profileField.setAccessible(true); |
|||
profileField.set(skullMeta, profile); |
|||
} |
|||
catch (IllegalAccessException | IllegalArgumentException | NoSuchFieldException e1) { |
|||
e1.printStackTrace(); |
|||
} |
|||
head.setItemMeta(skullMeta); |
|||
return head; |
|||
} |
|||
|
|||
public static ItemStack lore(Material material, short n, int n2, List<String> lore) { |
|||
final ItemStack itemStack = new ItemStack(material, n2, n); |
|||
final ItemMeta itemMeta = itemStack.getItemMeta(); |
|||
itemMeta.setLore(lore); |
|||
itemStack.setItemMeta(itemMeta); |
|||
return itemStack; |
|||
} |
|||
|
|||
public static ItemStack lore(ItemStack itemStack, List<String> lore) { |
|||
final ItemMeta itemMeta = itemStack.getItemMeta(); |
|||
itemMeta.setLore(lore); |
|||
itemStack.setItemMeta(itemMeta); |
|||
return itemStack; |
|||
} |
|||
|
|||
public static ItemStack lore(Material material, short n, int n2, String s) { |
|||
final ItemStack itemStack = new ItemStack(material, n2, n); |
|||
final ItemMeta itemMeta = itemStack.getItemMeta(); |
|||
final ArrayList<String> lore = new ArrayList<>(); |
|||
lore.add(s); |
|||
itemMeta.setLore(lore); |
|||
itemStack.setItemMeta(itemMeta); |
|||
return itemStack; |
|||
} |
|||
|
|||
public static ItemStack lore(ItemStack itemStack, String s) { |
|||
final ItemMeta itemMeta = itemStack.getItemMeta(); |
|||
final List<String> lore = itemMeta.hasLore() ? itemMeta.getLore() : new ArrayList<>(); |
|||
lore.add(s); |
|||
itemMeta.setLore(lore); |
|||
itemStack.setItemMeta(itemMeta); |
|||
return itemStack; |
|||
} |
|||
|
|||
public static ItemStack name(Material material, short n, int n2, String displayName) { |
|||
final ItemStack itemStack = new ItemStack(material, n2, n); |
|||
final ItemMeta itemMeta = itemStack.getItemMeta(); |
|||
itemMeta.setDisplayName(displayName); |
|||
itemStack.setItemMeta(itemMeta); |
|||
return itemStack; |
|||
} |
|||
|
|||
public static ItemStack name(ItemStack itemStack, String displayName) { |
|||
final ItemMeta itemMeta = itemStack.getItemMeta(); |
|||
itemMeta.setDisplayName(displayName); |
|||
itemStack.setItemMeta(itemMeta); |
|||
return itemStack; |
|||
} |
|||
|
|||
public static ItemStack nameLore(Material material, short n, int n2, List<String> lore, String displayName) { |
|||
final ItemStack itemStack = new ItemStack(material, n2, n); |
|||
final ItemMeta itemMeta = itemStack.getItemMeta(); |
|||
itemMeta.setDisplayName(displayName); |
|||
itemMeta.setLore(lore); |
|||
itemStack.setItemMeta(itemMeta); |
|||
return itemStack; |
|||
} |
|||
|
|||
public static ItemStack nameLore(ItemStack itemStack, List<String> lore, String displayName) { |
|||
final ItemMeta itemMeta = itemStack.getItemMeta(); |
|||
itemMeta.setDisplayName(displayName); |
|||
itemMeta.setLore(lore); |
|||
itemStack.setItemMeta(itemMeta); |
|||
return itemStack; |
|||
} |
|||
|
|||
public static ItemStack nameLore(Material material, short n, int n2, String s, String displayName) { |
|||
final ItemStack itemStack = new ItemStack(material, n2, n); |
|||
final ItemMeta itemMeta = itemStack.getItemMeta(); |
|||
itemMeta.setDisplayName(displayName); |
|||
final ArrayList<String> lore = new ArrayList<>(); |
|||
lore.add(s); |
|||
itemMeta.setLore(lore); |
|||
itemStack.setItemMeta(itemMeta); |
|||
return itemStack; |
|||
} |
|||
|
|||
public static ItemStack nameLore(ItemStack itemStack, String s, String displayName) { |
|||
final ItemMeta itemMeta = itemStack.getItemMeta(); |
|||
itemMeta.setDisplayName(displayName); |
|||
final ArrayList<String> lore = new ArrayList<>(); |
|||
lore.add(s); |
|||
itemMeta.setLore(lore); |
|||
itemStack.setItemMeta(itemMeta); |
|||
return itemStack; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,19 @@ |
|||
package cx.sfy.TheBridge.utils; |
|||
|
|||
public class MathUtils { |
|||
|
|||
public static int toMegaByte(long bytes) { |
|||
return (int) (bytes / 1048576); |
|||
} |
|||
|
|||
public static boolean isInt(String str) { |
|||
try { |
|||
int d = Integer.parseInt(str); |
|||
d = d + 1; |
|||
} catch (NumberFormatException nfe) { |
|||
return false; |
|||
} |
|||
return true; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,7 @@ |
|||
package cx.sfy.TheBridge.utils; |
|||
|
|||
public class PaperOnly { |
|||
|
|||
|
|||
|
|||
} |
@ -0,0 +1,179 @@ |
|||
package cx.sfy.TheBridge.utils; |
|||
|
|||
import org.bukkit.Bukkit; |
|||
import org.bukkit.ChatColor; |
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.potion.PotionEffect; |
|||
import org.bukkit.potion.PotionEffectType; |
|||
import org.bukkit.scoreboard.DisplaySlot; |
|||
import org.bukkit.scoreboard.Objective; |
|||
import org.bukkit.scoreboard.Scoreboard; |
|||
import org.bukkit.scoreboard.Team; |
|||
|
|||
public class ScoreboardUtil { |
|||
|
|||
private Scoreboard scoreboard; |
|||
private Objective objective; |
|||
private Objective objective2; |
|||
private boolean reset; |
|||
|
|||
public String color(String s) { |
|||
return s.replaceAll("&", "§"); |
|||
} |
|||
|
|||
public ScoreboardUtil(String s, String s2, Boolean b) { |
|||
this.scoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); |
|||
(this.objective = this.scoreboard.registerNewObjective(s2, "dummy")).setDisplayName(s); |
|||
this.objective2 = this.scoreboard.registerNewObjective("h2", "health"); |
|||
this.objective.setDisplaySlot(DisplaySlot.SIDEBAR); |
|||
this.objective2.setDisplayName((Object)ChatColor.RED + "❤"); |
|||
this.objective2.setDisplaySlot(DisplaySlot.BELOW_NAME); |
|||
} |
|||
|
|||
public void setName(String substring) { |
|||
if (substring.length() > 32) { |
|||
substring = substring.substring(0, 32); |
|||
} |
|||
this.objective.setDisplayName(color(substring)); |
|||
} |
|||
|
|||
public void lines(Integer n, String substring) { |
|||
Team team = this.scoreboard.getTeam("TEAM_" + n); |
|||
if (substring.length() > 32) { |
|||
substring = substring.substring(0, 32); |
|||
} |
|||
String[] splitStringLine = this.splitStringLine(substring); |
|||
if (team == null) { |
|||
Team registerNewTeam = this.scoreboard.registerNewTeam("TEAM_" + n); |
|||
registerNewTeam.addEntry(this.getEntry(n)); |
|||
this.setPrefix(registerNewTeam, splitStringLine[0]); |
|||
this.setSuffix(registerNewTeam, splitStringLine[1]); |
|||
this.objective.getScore(this.getEntry(n)).setScore((int)n); |
|||
} else { |
|||
this.setPrefix(team, splitStringLine[0]); |
|||
this.setSuffix(team, splitStringLine[1]); |
|||
} |
|||
} |
|||
|
|||
public int getArb(Player p) { |
|||
for (PotionEffect e : p.getActivePotionEffects()) { |
|||
if (e.getType().equals(PotionEffectType.ABSORPTION)) { |
|||
return e.getAmplifier(); |
|||
} |
|||
} |
|||
return 0; |
|||
} |
|||
|
|||
public void setPrefix(Team team, String prefix) { |
|||
if (prefix.length() > 16) { |
|||
team.setPrefix(prefix.substring(0, 16)); |
|||
return; |
|||
} |
|||
team.setPrefix(prefix); |
|||
} |
|||
|
|||
public void setSuffix(Team team, String s) { |
|||
if (s.length() > 16) { |
|||
team.setSuffix(this.maxChars(16, s)); |
|||
} |
|||
else { |
|||
team.setSuffix(s.substring(0, s.length())); |
|||
} |
|||
} |
|||
|
|||
public String maxChars(int n, String s) { |
|||
if (ChatColor.translateAlternateColorCodes('&', s).length() > n) { |
|||
return s.substring(0, n); |
|||
} |
|||
return ChatColor.translateAlternateColorCodes('&', s); |
|||
} |
|||
|
|||
public String getEntry(Integer n) { |
|||
if (n == 0) { |
|||
return "§0"; |
|||
} |
|||
if (n == 1) { |
|||
return "§1"; |
|||
} |
|||
if (n == 2) { |
|||
return "§2"; |
|||
} |
|||
if (n == 3) { |
|||
return "§3"; |
|||
} |
|||
if (n == 4) { |
|||
return "§4"; |
|||
} |
|||
if (n == 5) { |
|||
return "§5"; |
|||
} |
|||
if (n == 6) { |
|||
return "§6"; |
|||
} |
|||
if (n == 7) { |
|||
return "§7"; |
|||
} |
|||
if (n == 8) { |
|||
return "§8"; |
|||
} |
|||
if (n == 9) { |
|||
return "§9"; |
|||
} |
|||
if (n == 10) { |
|||
return "§a"; |
|||
} |
|||
if (n == 11) { |
|||
return "§b"; |
|||
} |
|||
if (n == 12) { |
|||
return "§c"; |
|||
} |
|||
if (n == 13) { |
|||
return "§d"; |
|||
} |
|||
if (n == 14) { |
|||
return "§e"; |
|||
} |
|||
if (n == 15) { |
|||
return "§f"; |
|||
} |
|||
return ""; |
|||
} |
|||
|
|||
public Scoreboard getScoreboard() { |
|||
return this.scoreboard; |
|||
} |
|||
|
|||
public void setReset(boolean reset) { |
|||
this.reset = reset; |
|||
} |
|||
|
|||
public boolean isReset() { |
|||
return this.reset; |
|||
} |
|||
|
|||
public void build(Player player) { |
|||
player.setScoreboard(this.scoreboard); |
|||
} |
|||
|
|||
private String[] splitStringLine(String s) { |
|||
StringBuilder sb = new StringBuilder(s.substring(0, (s.length() >= 16) ? 16 : s.length())); |
|||
StringBuilder sb2 = new StringBuilder((s.length() > 16) ? s.substring(16) : ""); |
|||
if (sb.toString().length() > 1 && sb.charAt(sb.length() - 1) == '§') { |
|||
sb.deleteCharAt(sb.length() - 1); |
|||
sb2.insert(0, '§'); |
|||
} |
|||
String string = ""; |
|||
for (int i = 0; i < sb.toString().length(); ++i) { |
|||
if (sb.toString().charAt(i) == '§' && i < sb.toString().length() - 1) { |
|||
string = String.valueOf(string) + "§" + sb.toString().charAt(i + 1); |
|||
} |
|||
} |
|||
String string2 = new StringBuilder().append((Object)sb2).toString(); |
|||
if (sb.length() > 14) { |
|||
string2 = (string.isEmpty() ? ("§" + string2) : (String.valueOf(String.valueOf(string)) + string2)); |
|||
} |
|||
return new String[] { (sb.toString().length() > 16) ? sb.toString().substring(0, 16) : sb.toString(), (string2.toString().length() > 16) ? string2.toString().substring(0, 16) : string2.toString() }; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,49 @@ |
|||
package cx.sfy.TheBridge.utils; |
|||
|
|||
import java.util.HashMap; |
|||
|
|||
import org.bukkit.entity.Player; |
|||
import org.bukkit.scheduler.BukkitRunnable; |
|||
import org.bukkit.scheduler.BukkitTask; |
|||
|
|||
import cx.sfy.TheBridge.Main; |
|||
|
|||
public class Tagged { |
|||
|
|||
private static HashMap<Player, Player> tag = new HashMap<Player, Player>(); |
|||
private static HashMap<Player, BukkitTask> tagTask = new HashMap<Player, BukkitTask>(); |
|||
|
|||
public static void setTag(Player p, Player tagged) { |
|||
if (!tag.containsKey(p)) { |
|||
tag.put(p, tagged); |
|||
BukkitTask task = new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
tag.remove(p); |
|||
cancel(); |
|||
} |
|||
}.runTaskLater(Main.get(), 5 * 20); |
|||
tagTask.put(p, task); |
|||
} else { |
|||
tag.remove(p); |
|||
tagTask.get(p).cancel(); |
|||
tag.put(p, tagged); |
|||
BukkitTask task = new BukkitRunnable() { |
|||
@Override |
|||
public void run() { |
|||
tag.remove(p); |
|||
cancel(); |
|||
} |
|||
}.runTaskLater(Main.get(), 5 * 20); |
|||
tagTask.put(p, task); |
|||
} |
|||
} |
|||
|
|||
public static Player getTag(Player p) { |
|||
if (tag.containsKey(p)) { |
|||
return tag.get(p); |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
} |
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue