This commit is contained in:
rockyhawk64 2021-07-13 20:05:30 +10:00
parent c26f8b2037
commit e7b7872294
53 changed files with 1413 additions and 552 deletions

View File

@ -1,146 +0,0 @@
# |------------------------------------------------------------------------
# | CommandPanels Example File
# | By RockyHawk v2.3
# | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/
# |------------------------------------------------------------------------
panels:
example:
perm: admin
rows: 4
title: '&6[&bExample Panel&6]&f Welcome!'
commands:
- "example"
sound-on-open: BLOCK_NOTE_BLOCK_CHIME
empty: BLACK_STAINED_GLASS_PANE
disabled-worlds:
- 'world_nether'
open-with-item:
material: CLOCK
name: '&6[&bExample Panel&6]'
lore:
- '&3Click me to open the panel!'
item:
'0':
material: LEATHER_HELMET
name: '&d&lPURPLE'
leatherarmor: PURPLE
damage: 30
'1':
material: DIAMOND
name: '&fThis is a diamond'
lore: "&7Feel free to take me!"
itemType:
- placeable
'10':
material: RED_WOOL
name: '&fTake the diamond'
hasvalue:
value: DIAMOND
output: false
compare: '%cp-material-1%'
name: '&fNice One!'
material: GREEN_WOOL
'9':
material: LEATHER_CHESTPLATE
name: '&9&lBLUE'
leatherarmor: BLUE
damage: 20
'18':
material: LEATHER_LEGGINGS
name: '&a&lLIME'
leatherarmor: LIME
damage: 40
'2':
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGJiMjczN2VjYmY5MTBlZmUzYjI2N2RiN2Q0YjMyN2YzNjBhYmM3MzJjNzdiZDBlNGVmZjFkNTEwY2RlZiJ9fX0=
name: '&e&lE'
'3':
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWE2Nzg3YmEzMjU2NGU3YzJmM2EwY2U2NDQ5OGVjYmIyM2I4OTg0NWU1YTY2YjVjZWM3NzM2ZjcyOWVkMzcifX19
name: '&e&lX'
'4':
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTY3ZDgxM2FlN2ZmZTViZTk1MWE0ZjQxZjJhYTYxOWE1ZTM4OTRlODVlYTVkNDk4NmY4NDk0OWM2M2Q3NjcyZSJ9fX0=
name: '&e&lA'
'5':
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDljNDVhMjRhYWFiZjQ5ZTIxN2MxNTQ4MzIwNDg0OGE3MzU4MmFiYTdmYWUxMGVlMmM1N2JkYjc2NDgyZiJ9fX0=
name: '&e&lM'
'6':
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTBhNzk4OWI1ZDZlNjIxYTEyMWVlZGFlNmY0NzZkMzUxOTNjOTdjMWE3Y2I4ZWNkNDM2MjJhNDg1ZGMyZTkxMiJ9fX0=
name: '&e&lP'
'7':
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzE5ZjUwYjQzMmQ4NjhhZTM1OGUxNmY2MmVjMjZmMzU0MzdhZWI5NDkyYmNlMTM1NmM5YWE2YmIxOWEzODYifX19
name: '&e&lL'
'8':
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGJiMjczN2VjYmY5MTBlZmUzYjI2N2RiN2Q0YjMyN2YzNjBhYmM3MzJjNzdiZDBlNGVmZjFkNTEwY2RlZiJ9fX0=
name: '&e&lE'
'13':
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTBhNzk4OWI1ZDZlNjIxYTEyMWVlZGFlNmY0NzZkMzUxOTNjOTdjMWE3Y2I4ZWNkNDM2MjJhNDg1ZGMyZTkxMiJ9fX0=
name: '&e&lP'
'14':
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTY3ZDgxM2FlN2ZmZTViZTk1MWE0ZjQxZjJhYTYxOWE1ZTM4OTRlODVlYTVkNDk4NmY4NDk0OWM2M2Q3NjcyZSJ9fX0=
name: '&e&lA'
'15':
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzViOGIzZDhjNzdkZmI4ZmJkMjQ5NWM4NDJlYWM5NGZmZmE2ZjU5M2JmMTVhMjU3NGQ4NTRkZmYzOTI4In19fQ==
name: '&e&lN'
'16':
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGJiMjczN2VjYmY5MTBlZmUzYjI2N2RiN2Q0YjMyN2YzNjBhYmM3MzJjNzdiZDBlNGVmZjFkNTEwY2RlZiJ9fX0=
name: '&e&lE'
'17':
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzE5ZjUwYjQzMmQ4NjhhZTM1OGUxNmY2MmVjMjZmMzU0MzdhZWI5NDkyYmNlMTM1NmM5YWE2YmIxOWEzODYifX19
name: '&e&lL'
'20':
material: RED_WOOL
name: '&cYour nickname is not ''RockyHawk'''
commands:
- 'msg= &cNot RockyHawk'
hasvalue:
output: true
value: RockyHawk
compare: '%cp-player-name%'
material: LIME_WOOL
name: '&aYour username is ''RockyHawk'''
commands:
- 'msg= &aWelcome my master!'
'27':
material: LEATHER_BOOTS
name: '&e&lYELLOW'
leatherarmor: YELLOW
damage: 50
'32':
material: COMPASS
stack: 12
enchanted: true
name: '&cClick Me'
lore:
- '&fI will teleport you home!'
commands:
- home
- cpc
- console= title %cp-player-name% times 20 60 20
- console= title %cp-player-name% subtitle {"text":"%cp-player-displayname%","color":"green"}
- console= title %cp-player-name% title {"text":"Welcome Home"}
'30':
material: POTION
name: '&5&lInstant Health II'
potion: INSTANT_HEAL
commands:
- heal
- cpc
'34':
material: REDSTONE_BLOCK
name: '&cNo Permission'
lore:
- '&4You cannot change to'
- '&4creative looking like that!'
hasperm:
perm: essentials.gamemode
output: true
material: EMERALD_BLOCK
name: '&aClick Me'
lore:
- '&2I will change you'
- '&2to creative mode!'
commands:
- gamemode creative
- cpc
- console= title %cp-player-name% times 20 60 20
- console= title %cp-player-name% subtitle {"text":"You are now in creative mode!","color":"green"}
- console= title %cp-player-name% title {"text":"Awesome %cp-player-displayname%"}

View File

@ -0,0 +1,42 @@
# |------------------------------------------------------------------------
# | CommandPanels Example File
# | By RockyHawk v3.0
# | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/
# |------------------------------------------------------------------------
panels:
example_bottom:
perm: default
rows: 3
title: 'Example'
empty: LIGHT_BLUE_STAINED_GLASS_PANE
panelType:
- nocommand
item:
'0':
material: BARRIER
name: '&cClose the panel'
commands:
- cpc
'4':
material: cps= self
name: '&7Name: &eRockyHawk'
lore:
- ''
- '&8Example Panel made by:'
- '&8RockyHawk'
'8':
material: ENDER_PEARL
name: '&bOpen Player Browser'
commands:
- open= example_middle_two {Middle}
hasvalue:
compare: '%cp-data-example_item%'
value: true
material: COOKED_PORKCHOP
name: '&fSecret Item'
lore:
- '&7Click me and I will allow you to'
- '&7use the one time only message again'
commands:
- set-data= example_item false
- 'refresh'

View File

@ -0,0 +1,121 @@
# |------------------------------------------------------------------------
# | CommandPanels Example File
# | By RockyHawk v3.0
# | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/
# |------------------------------------------------------------------------
panels:
example_middle_one:
perm: default
rows: 3
title: 'Example'
animatevalue: 15
refresh-delay: 5
panelType:
- nocommand
empty: YELLOW_STAINED_GLASS_PANE
item:
'0':
material: AIR
stack: 1
name: ''
animate0:
material: PUFFERFISH
name: '&eHayley the Pufferfish'
'1':
material: AIR
stack: 1
name: ''
animate1:
material: PUFFERFISH
name: '&eHayley the Pufferfish'
'2':
material: AIR
stack: 1
name: ''
animate2:
material: PUFFERFISH
name: '&eHayley the Pufferfish'
'3':
material: AIR
stack: 1
name: ''
animate3:
material: PUFFERFISH
name: '&eHayley the Pufferfish'
'5':
material: AIR
stack: 1
name: ''
animate9:
material: PUFFERFISH
name: '&eHayley the Pufferfish'
'6':
material: AIR
stack: 1
name: ''
animate10:
material: PUFFERFISH
name: '&eHayley the Pufferfish'
'7':
material: AIR
stack: 1
name: ''
animate11:
material: PUFFERFISH
name: '&eHayley the Pufferfish'
'12':
material: AIR
stack: 1
name: ''
animate4:
material: PUFFERFISH
name: '&eHayley the Pufferfish'
'14':
material: AIR
stack: 1
name: ''
animate8:
material: PUFFERFISH
name: '&eHayley the Pufferfish'
'16':
material: AIR
stack: 1
name: ''
animate12:
material: PUFFERFISH
name: '&eHayley the Pufferfish'
'21':
material: AIR
stack: 1
name: ''
animate5:
material: PUFFERFISH
name: '&eHayley the Pufferfish'
'22':
material: AIR
stack: 1
name: ''
animate6:
material: PUFFERFISH
name: '&eHayley the Pufferfish'
'23':
material: AIR
stack: 1
name: ''
animate7:
material: PUFFERFISH
name: '&eHayley the Pufferfish'
'25':
material: AIR
stack: 1
name: ''
animate13:
material: PUFFERFISH
name: '&eHayley the Pufferfish'
'26':
material: AIR
stack: 1
name: ''
animate14:
material: PUFFERFISH
name: '&eHayley the Pufferfish'

View File

@ -0,0 +1,180 @@
# |------------------------------------------------------------------------
# | CommandPanels Example File
# | By RockyHawk v3.0
# | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/
# |------------------------------------------------------------------------
panels:
example_middle_two:
perm: default
rows: 4
title: '&e&lOnline Browser - Page $cp-data-nextpage$'
empty: LIGHT_BLUE_STAINED_GLASS_PANE
panelType:
- nocommand
placeholders:
primary:
start: '$'
end: '$'
secondary:
start: '{'
end: '}'
pre-load-commands:
- add-data= onlinepage 0
- add-data= nextpage 1
item:
'10':
material: 'cps= $cp-player-online-%math_1+14*{cp-data-onlinepage}%$'
name: '&e$cp-player-online-%math_1+14*{cp-data-onlinepage}%$'
hasvalue:
compare: '$cp-player-online-%math_1+14*{cp-data-onlinepage}%$'
value: 'Offline'
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmMyNzEwNTI3MTllZjY0MDc5ZWU4YzE0OTg5NTEyMzhhNzRkYWM0YzI3Yjk1NjQwZGI2ZmJkZGMyZDZiNWI2ZSJ9fX0=
stack: 1
name: '&7&l????'
'11':
material: 'cps= $cp-player-online-%math_2+14*{cp-data-onlinepage}%$'
name: '&e$cp-player-online-%math_2+14*{cp-data-onlinepage}%$'
hasvalue:
compare: '&e$cp-player-online-%math_2+14*{cp-data-onlinepage}%$'
value: 'Offline'
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmMyNzEwNTI3MTllZjY0MDc5ZWU4YzE0OTg5NTEyMzhhNzRkYWM0YzI3Yjk1NjQwZGI2ZmJkZGMyZDZiNWI2ZSJ9fX0=
stack: 1
name: '&7&l????'
'12':
material: 'cps= $cp-player-online-%math_3+14*{cp-data-onlinepage}%$'
name: '&e$cp-player-online-%math_3+14*{cp-data-onlinepage}%$'
hasvalue:
compare: '&e$cp-player-online-%math_3+14*{cp-data-onlinepage}%$'
value: 'Offline'
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmMyNzEwNTI3MTllZjY0MDc5ZWU4YzE0OTg5NTEyMzhhNzRkYWM0YzI3Yjk1NjQwZGI2ZmJkZGMyZDZiNWI2ZSJ9fX0=
stack: 1
name: '&7&l????'
'13':
material: 'cps= $cp-player-online-%math_4+14*{cp-data-onlinepage}%$'
name: '&e$cp-player-online-%math_4+14*{cp-data-onlinepage}%$'
hasvalue:
compare: '&e$cp-player-online-%math_4+14*{cp-data-onlinepage}%$'
value: 'Offline'
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmMyNzEwNTI3MTllZjY0MDc5ZWU4YzE0OTg5NTEyMzhhNzRkYWM0YzI3Yjk1NjQwZGI2ZmJkZGMyZDZiNWI2ZSJ9fX0=
stack: 1
name: '&7&l????'
'14':
material: 'cps= $cp-player-online-%math_5+14*{cp-data-onlinepage}%$'
name: '&e$cp-player-online-%math_5+14*{cp-data-onlinepage}%$'
hasvalue:
compare: '&e$cp-player-online-%math_5+14*{cp-data-onlinepage}%$'
value: 'Offline'
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmMyNzEwNTI3MTllZjY0MDc5ZWU4YzE0OTg5NTEyMzhhNzRkYWM0YzI3Yjk1NjQwZGI2ZmJkZGMyZDZiNWI2ZSJ9fX0=
stack: 1
name: '&7&l????'
'15':
material: 'cps= $cp-player-online-%math_6+14*{cp-data-onlinepage}%$'
name: '&e$cp-player-online-%math_6+14*{cp-data-onlinepage}%$'
hasvalue:
compare: '&e$cp-player-online-%math_6+14*{cp-data-onlinepage}%$'
value: 'Offline'
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmMyNzEwNTI3MTllZjY0MDc5ZWU4YzE0OTg5NTEyMzhhNzRkYWM0YzI3Yjk1NjQwZGI2ZmJkZGMyZDZiNWI2ZSJ9fX0=
stack: 1
name: '&7&l????'
'16':
material: 'cps= $cp-player-online-%math_7+14*{cp-data-onlinepage}%$'
name: '&e$cp-player-online-%math_7+14*{cp-data-onlinepage}%$'
hasvalue:
compare: '&e$cp-player-online-%math_7+14*{cp-data-onlinepage}%$'
value: 'Offline'
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmMyNzEwNTI3MTllZjY0MDc5ZWU4YzE0OTg5NTEyMzhhNzRkYWM0YzI3Yjk1NjQwZGI2ZmJkZGMyZDZiNWI2ZSJ9fX0=
stack: 1
name: '&7&l????'
'19':
material: 'cps= $cp-player-online-%math_8+14*{cp-data-onlinepage}%$'
name: '&e$cp-player-online-%math_8+14*{cp-data-onlinepage}%$'
hasvalue:
compare: '&e$cp-player-online-%math_8+14*{cp-data-onlinepage}%$'
value: 'Offline'
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmMyNzEwNTI3MTllZjY0MDc5ZWU4YzE0OTg5NTEyMzhhNzRkYWM0YzI3Yjk1NjQwZGI2ZmJkZGMyZDZiNWI2ZSJ9fX0=
stack: 1
name: '&7&l????'
'20':
material: 'cps= $cp-player-online-%math_9+14*{cp-data-onlinepage}%$'
name: '&e$cp-player-online-%math_9+14*{cp-data-onlinepage}%$'
hasvalue:
compare: '&e$cp-player-online-%math_9+14*{cp-data-onlinepage}%$'
value: 'Offline'
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmMyNzEwNTI3MTllZjY0MDc5ZWU4YzE0OTg5NTEyMzhhNzRkYWM0YzI3Yjk1NjQwZGI2ZmJkZGMyZDZiNWI2ZSJ9fX0=
stack: 1
name: '&7&l????'
'21':
material: 'cps= $cp-player-online-%math_10+14*{cp-data-onlinepage}%$'
name: '&e$cp-player-online-%math_10+14*{cp-data-onlinepage}%$'
hasvalue:
compare: '&e$cp-player-online-%math_10+14*{cp-data-onlinepage}%$'
value: 'Offline'
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmMyNzEwNTI3MTllZjY0MDc5ZWU4YzE0OTg5NTEyMzhhNzRkYWM0YzI3Yjk1NjQwZGI2ZmJkZGMyZDZiNWI2ZSJ9fX0=
stack: 1
name: '&7&l????'
'22':
material: 'cps= $cp-player-online-%math_11+14*{cp-data-onlinepage}%$'
name: '&e$cp-player-online-%math_11+14*{cp-data-onlinepage}%$'
hasvalue:
compare: '&e$cp-player-online-%math_11+14*{cp-data-onlinepage}%$'
value: 'Offline'
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmMyNzEwNTI3MTllZjY0MDc5ZWU4YzE0OTg5NTEyMzhhNzRkYWM0YzI3Yjk1NjQwZGI2ZmJkZGMyZDZiNWI2ZSJ9fX0=
stack: 1
name: '&7&l????'
'23':
material: 'cps= $cp-player-online-%math_12+14*{cp-data-onlinepage}%$'
name: '&e$cp-player-online-%math_12+14*{cp-data-onlinepage}%$'
hasvalue:
compare: '&e$cp-player-online-%math_12+14*{cp-data-onlinepage}%$'
value: 'Offline'
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmMyNzEwNTI3MTllZjY0MDc5ZWU4YzE0OTg5NTEyMzhhNzRkYWM0YzI3Yjk1NjQwZGI2ZmJkZGMyZDZiNWI2ZSJ9fX0=
stack: 1
name: '&7&l????'
'24':
material: 'cps= $cp-player-online-%math_13+14*{cp-data-onlinepage}%$'
name: '&e$cp-player-online-%math_13+14*{cp-data-onlinepage}%$'
hasvalue:
compare: '&e$cp-player-online-%math_13+14*{cp-data-onlinepage}%$'
value: 'Offline'
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmMyNzEwNTI3MTllZjY0MDc5ZWU4YzE0OTg5NTEyMzhhNzRkYWM0YzI3Yjk1NjQwZGI2ZmJkZGMyZDZiNWI2ZSJ9fX0=
stack: 1
name: '&7&l????'
'25':
material: 'cps= $cp-player-online-%math_14+14*{cp-data-onlinepage}%$'
name: '&e$cp-player-online-%math_14+14*{cp-data-onlinepage}%$'
hasvalue:
compare: '&e$cp-player-online-%math_14+14*{cp-data-onlinepage}%$'
value: 'Offline'
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmMyNzEwNTI3MTllZjY0MDc5ZWU4YzE0OTg5NTEyMzhhNzRkYWM0YzI3Yjk1NjQwZGI2ZmJkZGMyZDZiNWI2ZSJ9fX0=
stack: 1
name: '&7&l????'
'2':
material: LIGHT_BLUE_STAINED_GLASS_PANE
name: "&f"
hasgreater:
compare: '$cp-data-onlinepage$'
value: 1
material: STICK
stack: 1
name: "&c&lLast Page"
commands:
- math-data= onlinepage -1
- math-data= nextpage -1
- refresh
'6':
material: ARROW
stack: 1
name: "&e&lNext Page"
commands:
- 'math-data= onlinepage +1'
- 'math-data= nextpage +1'
- 'refresh'
'4':
material: OAK_SIGN
name: '&e&lOnline Players'
lore:
- '&b$cp-online-players$'
- ''
- '&8Player Browser made by:'
- '&8TinyTank800'

150
resource/example_top.yml Normal file
View File

@ -0,0 +1,150 @@
# |------------------------------------------------------------------------
# | CommandPanels Example File
# | By RockyHawk v3.0
# | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/
# |------------------------------------------------------------------------
panels:
example:
perm: admin
rows: 6
title: '&6&l[&b&lExample&6&l]&r Hello %cp-player-name%!'
sound-on-open: BLOCK_NOTE_BLOCK_CHIME
pre-load-commands:
- placeholder= [item:APPLE]
- add-data= example_item false
commands-on-open:
- open= example_middle_one {Middle}
- open= example_bottom {Bottom}
commands:
- example_panel
empty: LIGHT_BLUE_STAINED_GLASS_PANE
custom-item:
bread:
material: BREAD
name: '&fMmm.. Yummy'
item:
'1':
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjc3MTY1YzlkYjc2M2E5YWNkMTNjMDYyMjBlOTJkM2M5NzBkZmEzNmRhYzU2ZTU5NTdkMDJkMzZmNWE5ZjBiOCJ9fX0=
name: '&e&lE'
'2':
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTVkNWM3NWY2Njc1ZWRjMjkyZWEzNzg0NjA3Nzk3MGQyMjZmYmQ1MjRlN2ZkNjgwOGYzYTQ3ODFhNTQ5YjA4YyJ9fX0=
name: '&e&lX'
'3':
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTUxN2I0ODI5YjgzMTkyYmQ3MjcxMTI3N2E4ZWZjNDE5NjcxMWU0MTgwYzIyYjNlMmI4MTY2YmVhMWE5ZGUxOSJ9fX0=
name: '&e&lA'
'4':
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWQ3MTYyNTZkNzI3YmExZGYxOGY4MjZmMTE5MDUxYzMzYTM5NDIwOWE5NWJlODM3Y2NmNmZhZTllZTZiODcxYiJ9fX0=
name: '&e&lM'
'5':
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjU1MzE0MWFhYmU4OWE4YTU4MDRhMTcyMTMzYjQzZDVkMGVlMDU0OWNjMTlkYjAzODU2ODQwNDNjZmE5NDZhNSJ9fX0=
name: '&e&lP'
'6':
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMjA2YmM0MTdlM2MwNmIyMjczNWQ1MzlmOWM2YzhmZDdjMWVmZDE5MjM2ZTJjMzgxNTM0MDUxZDlkNmJlZTgwNCJ9fX0=
name: '&e&lL'
'7':
material: cps= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjc3MTY1YzlkYjc2M2E5YWNkMTNjMDYyMjBlOTJkM2M5NzBkZmEzNmRhYzU2ZTU5NTdkMDJkMzZmNWE5ZjBiOCJ9fX0=
name: '&e&lE'
'15':
material: IRON_SWORD
name: '&fThis sword has been damaged'
damage: 20
'17':
material: LEATHER_HELMET
name: '&aGreen &fArmor'
leatherarmor: GREEN
'18':
material: BREAD
name: '&fPay $20 for bread'
commands:
- paywall= 20
- give-item= bread
'19':
material: APPLE
name: '&fClick me to change item'
commands:
- placeholder= [item:GOLDEN_APPLE]
- refresh
hasvalue:
material: GOLDEN_APPLE
compare: '%cp-item%'
value: GOLDEN_APPLE
name: '&fClick me to change item'
commands:
- placeholder= [item:APPLE]
- refresh
'21':
material: POTION
name: '&fClick to heal the player'
potion: INSTANT_HEAL
lore:
- '&7Uses the /heal command so that'
- '&7the player needs permission'
commands:
- heal
'24':
material: BOW
name: '&fThis bow is enchanted'
enchanted: true
'26':
material: LEATHER_CHESTPLATE
name: '&eYellow &fArmor'
leatherarmor: YELLOW
'27':
material: COOKED_BEEF
name: '&fReplenish your hunger bars'
lore:
- '&7Uses /feed command'
commands:
- feed
'28':
material: COOKED_PORKCHOP
name: '&fSends a message'
lore:
- '&7Can only be used once per player'
commands:
- set-data= example_item true
- msg= &fThis message can only be sent one time
- refresh
hasvalue:
compare: '%cp-data-example_item%'
value: true
material: BARRIER
name: '&cItem has been used!'
'30':
material: COMPASS
name: '&fTeleport Home'
commands:
- home
- cpc
- console= title %cp-player-name% times 20 60 20
- console= title %cp-player-name% subtitle {"text":"%cp-player-displayname%","color":"green"}
- console= title %cp-player-name% title {"text":"Welcome Home"}
'33':
material: ARROW
name: '&fItems can be stacked'
stack: 16
'35':
material: LEATHER_LEGGINGS
name: '&cRed &fArmor'
leatherarmor: RED
'42':
material: IRON_AXE
name: '#4eabd1Crazy #b6d1eaColours'
lore:
- '&71.16+ you can use HEX colours!'
'44':
material: LEATHER_BOOTS
name: '&6Orange &fArmor'
leatherarmor: ORANGE
'45':
material: RED_WOOL
name: '&cMinimize Panel'
commands:
- close= Middle
- close= Bottom
'46':
material: LIME_WOOL
name: '&aReset Bottom of Panel'
commands:
- open= example_middle_one {Middle}
- open= example_bottom {Bottom}

View File

@ -1,4 +1,4 @@
version: 3.16.0.1 version: 3.16.1.0
main: me.rockyhawk.commandpanels.CommandPanels main: me.rockyhawk.commandpanels.CommandPanels
name: CommandPanels name: CommandPanels
author: RockyHawk author: RockyHawk

View File

@ -33,10 +33,7 @@ import me.rockyhawk.commandpanels.ioclasses.nbt.NBTManager;
import me.rockyhawk.commandpanels.ioclasses.legacy.LegacyVersion; import me.rockyhawk.commandpanels.ioclasses.legacy.LegacyVersion;
import me.rockyhawk.commandpanels.ioclasses.legacy.MinecraftVersions; import me.rockyhawk.commandpanels.ioclasses.legacy.MinecraftVersions;
import me.rockyhawk.commandpanels.ioclasses.legacy.PlayerHeads; import me.rockyhawk.commandpanels.ioclasses.legacy.PlayerHeads;
import me.rockyhawk.commandpanels.openpanelsmanager.OpenGUI; import me.rockyhawk.commandpanels.openpanelsmanager.*;
import me.rockyhawk.commandpanels.openpanelsmanager.OpenPanelsLoader;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPermissions;
import me.rockyhawk.commandpanels.openpanelsmanager.UtilsPanelsLoader;
import me.rockyhawk.commandpanels.openwithitem.HotbarItemLoader; import me.rockyhawk.commandpanels.openwithitem.HotbarItemLoader;
import me.rockyhawk.commandpanels.openwithitem.SwapItemEvent; import me.rockyhawk.commandpanels.openwithitem.SwapItemEvent;
import me.rockyhawk.commandpanels.openwithitem.UtilsChestSortEvent; import me.rockyhawk.commandpanels.openwithitem.UtilsChestSortEvent;
@ -44,6 +41,8 @@ import me.rockyhawk.commandpanels.openwithitem.UtilsOpenWithItem;
import me.rockyhawk.commandpanels.panelblocks.BlocksTabComplete; import me.rockyhawk.commandpanels.panelblocks.BlocksTabComplete;
import me.rockyhawk.commandpanels.panelblocks.Commandpanelblocks; import me.rockyhawk.commandpanels.panelblocks.Commandpanelblocks;
import me.rockyhawk.commandpanels.panelblocks.PanelBlockOnClick; import me.rockyhawk.commandpanels.panelblocks.PanelBlockOnClick;
import me.rockyhawk.commandpanels.playerinventoryhandler.InventorySaver;
import me.rockyhawk.commandpanels.playerinventoryhandler.ItemStackSerializer;
import me.rockyhawk.commandpanels.updater.Updater; import me.rockyhawk.commandpanels.updater.Updater;
import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -101,7 +100,10 @@ public class CommandPanels extends JavaPlugin{
public HotbarItemLoader hotbar = new HotbarItemLoader(this); public HotbarItemLoader hotbar = new HotbarItemLoader(this);
public NBTManager nbt = new NBTManager(this); public NBTManager nbt = new NBTManager(this);
public File panelsf; public InventorySaver inventorySaver = new InventorySaver(this);
public ItemStackSerializer itemSerializer = new ItemStackSerializer(this);
public File panelsf = new File(this.getDataFolder() + File.separator + "panels");
public YamlConfiguration blockConfig; //where panel block locations are stored public YamlConfiguration blockConfig; //where panel block locations are stored
public void onEnable() { public void onEnable() {
@ -111,9 +113,9 @@ public class CommandPanels extends JavaPlugin{
updater.githubNewUpdate(false); updater.githubNewUpdate(false);
//register config files //register config files
this.panelsf = new File(this.getDataFolder() + File.separator + "panels");
this.blockConfig = YamlConfiguration.loadConfiguration(new File(getDataFolder() + File.separator + "blocks.yml")); this.blockConfig = YamlConfiguration.loadConfiguration(new File(getDataFolder() + File.separator + "blocks.yml"));
panelData.dataConfig = YamlConfiguration.loadConfiguration(new File(getDataFolder() + File.separator + "data.yml")); panelData.dataConfig = YamlConfiguration.loadConfiguration(new File(getDataFolder() + File.separator + "data.yml"));
inventorySaver.inventoryConfig = YamlConfiguration.loadConfiguration(new File(getDataFolder() + File.separator + "inventories.yml"));
this.config = YamlConfiguration.loadConfiguration(new File(this.getDataFolder() + File.separator + "config.yml")); this.config = YamlConfiguration.loadConfiguration(new File(this.getDataFolder() + File.separator + "config.yml"));
//save the config.yml file //save the config.yml file
@ -152,6 +154,8 @@ public class CommandPanels extends JavaPlugin{
Objects.requireNonNull(this.getCommand("commandpanelversion")).setExecutor(new Commandpanelversion(this)); Objects.requireNonNull(this.getCommand("commandpanelversion")).setExecutor(new Commandpanelversion(this));
Objects.requireNonNull(this.getCommand("commandpanellist")).setExecutor(new Commandpanelslist(this)); Objects.requireNonNull(this.getCommand("commandpanellist")).setExecutor(new Commandpanelslist(this));
this.getServer().getPluginManager().registerEvents(new Utils(this), this); this.getServer().getPluginManager().registerEvents(new Utils(this), this);
this.getServer().getPluginManager().registerEvents(updater, this);
this.getServer().getPluginManager().registerEvents(inventorySaver, this);
this.getServer().getPluginManager().registerEvents(new UtilsPanelsLoader(this), this); this.getServer().getPluginManager().registerEvents(new UtilsPanelsLoader(this), this);
this.getServer().getPluginManager().registerEvents(new GenUtils(this), this); this.getServer().getPluginManager().registerEvents(new GenUtils(this), this);
this.getServer().getPluginManager().registerEvents(new CommandpanelUserInput(this), this); this.getServer().getPluginManager().registerEvents(new CommandpanelUserInput(this), this);
@ -201,17 +205,27 @@ public class CommandPanels extends JavaPlugin{
this.getServer().getPluginManager().registerEvents(new UtilsChestSortEvent(this), this); this.getServer().getPluginManager().registerEvents(new UtilsChestSortEvent(this), this);
} }
//save the example.yml file and the template.yml file //save the example_top.yml file and the template.yml file
if (!this.panelsf.exists()) { if (!this.panelsf.exists()) {
try { try {
FileConfiguration exampleFileConfiguration;
FileConfiguration templateFileConfiguration = YamlConfiguration.loadConfiguration(getReaderFromStream(this.getResource("template.yml")));
if(legacy.LOCAL_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_12)){ if(legacy.LOCAL_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_12)){
exampleFileConfiguration = YamlConfiguration.loadConfiguration(getReaderFromStream(this.getResource("exampleLegacy.yml"))); FileConfiguration exampleFileConfiguration = YamlConfiguration.loadConfiguration(getReaderFromStream(this.getResource("exampleLegacy.yml")));
}else {
exampleFileConfiguration = YamlConfiguration.loadConfiguration(getReaderFromStream(this.getResource("example.yml")));
}
exampleFileConfiguration.save(new File(this.panelsf + File.separator + "example.yml")); exampleFileConfiguration.save(new File(this.panelsf + File.separator + "example.yml"));
}else {
//top
FileConfiguration exampleFileConfiguration = YamlConfiguration.loadConfiguration(getReaderFromStream(this.getResource("example_top.yml")));
exampleFileConfiguration.save(new File(this.panelsf + File.separator + "example_top.yml"));
//middle one
exampleFileConfiguration = YamlConfiguration.loadConfiguration(getReaderFromStream(this.getResource("example_middle_one.yml")));
exampleFileConfiguration.save(new File(this.panelsf + File.separator + "example_middle_one.yml"));
//middle two
exampleFileConfiguration = YamlConfiguration.loadConfiguration(getReaderFromStream(this.getResource("example_middle_two.yml")));
exampleFileConfiguration.save(new File(this.panelsf + File.separator + "example_middle_two.yml"));
//bottom
exampleFileConfiguration = YamlConfiguration.loadConfiguration(getReaderFromStream(this.getResource("example_bottom.yml")));
exampleFileConfiguration.save(new File(this.panelsf + File.separator + "example_bottom.yml"));
}
FileConfiguration templateFileConfiguration = YamlConfiguration.loadConfiguration(getReaderFromStream(this.getResource("template.yml")));
templateFileConfiguration.save(new File(this.panelsf + File.separator + "template.yml")); templateFileConfiguration.save(new File(this.panelsf + File.separator + "template.yml"));
} catch (IOException var11) { } catch (IOException var11) {
Bukkit.getConsoleSender().sendMessage("[CommandPanels]" + ChatColor.RED + " WARNING: Could not save the example file!"); Bukkit.getConsoleSender().sendMessage("[CommandPanels]" + ChatColor.RED + " WARNING: Could not save the example file!");
@ -245,7 +259,17 @@ public class CommandPanels extends JavaPlugin{
} }
public void onDisable() { public void onDisable() {
//close all the panels
for(String name : openPanels.openPanels.keySet()){
openPanels.closePanelForLoader(name, PanelPosition.Top);
try {
Bukkit.getPlayer(name).closeInventory();
}catch (Exception ignore){}
}
//save files
panelData.saveDataFile(); panelData.saveDataFile();
inventorySaver.saveInventoryFile();
if (Objects.requireNonNull(this.config.getString("updater.auto-update")).equalsIgnoreCase("true")) { if (Objects.requireNonNull(this.config.getString("updater.auto-update")).equalsIgnoreCase("true")) {
updater.autoUpdatePlugin(this.getFile().getName()); updater.autoUpdatePlugin(this.getFile().getName());
} }
@ -261,7 +285,7 @@ public class CommandPanels extends JavaPlugin{
ItemMeta renamedMeta = renamed.getItemMeta(); ItemMeta renamedMeta = renamed.getItemMeta();
//set cp placeholders //set cp placeholders
if(usePlaceholders){ if(usePlaceholders){
customName = tex.placeholdersNoColour(panel,p,customName); customName = tex.placeholdersNoColour(panel,PanelPosition.Top,p,customName);
} }
if(useColours){ if(useColours){
customName = tex.colour(customName); customName = tex.colour(customName);
@ -279,11 +303,11 @@ public class CommandPanels extends JavaPlugin{
List<String> re_lore; List<String> re_lore;
if (lore != null) { if (lore != null) {
if(usePlaceholders && useColours){ if(usePlaceholders && useColours){
re_lore = tex.placeholdersList(panel, p, lore, true); re_lore = tex.placeholdersList(panel,PanelPosition.Top, p, lore, true);
}else if(usePlaceholders){ }else if(usePlaceholders){
re_lore = tex.placeholdersNoColour(panel,p, lore); re_lore = tex.placeholdersNoColour(panel,PanelPosition.Top,p, lore);
}else if(useColours){ }else if(useColours){
re_lore = tex.placeholdersList(panel, p, lore, false); re_lore = tex.placeholdersList(panel,PanelPosition.Top, p, lore, false);
}else{ }else{
re_lore = lore; re_lore = lore;
} }

View File

@ -1,6 +1,8 @@
package me.rockyhawk.commandpanels; package me.rockyhawk.commandpanels;
import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.api.Panel;
import me.rockyhawk.commandpanels.commandtags.PaywallOutput;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -19,7 +21,7 @@ public class Utils implements Listener {
@EventHandler @EventHandler
public void onItemDrag(InventoryDragEvent e) { public void onItemDrag(InventoryDragEvent e) {
Player p = (Player)e.getWhoClicked(); Player p = (Player)e.getWhoClicked();
if(!plugin.openPanels.hasPanelOpen(p.getName())){ if(!plugin.openPanels.hasPanelOpen(p.getName(),PanelPosition.Top)){
return; return;
} }
if(e.getInventory().getType() != InventoryType.PLAYER){ if(e.getInventory().getType() != InventoryType.PLAYER){
@ -31,32 +33,64 @@ public class Utils implements Listener {
public void onPanelClick(InventoryClickEvent e) { public void onPanelClick(InventoryClickEvent e) {
//when clicked on a panel //when clicked on a panel
Player p = (Player)e.getWhoClicked(); Player p = (Player)e.getWhoClicked();
int clickedSlot = e.getSlot();
ItemStack clicked = e.getCurrentItem(); ItemStack clicked = e.getCurrentItem();
if(!plugin.openPanels.hasPanelOpen(p.getName()) || e.getSlotType() == InventoryType.SlotType.OUTSIDE || e.getClick() == ClickType.DOUBLE_CLICK){
if(!plugin.openPanels.hasPanelOpen(p.getName(),PanelPosition.Top) || e.getClick() == ClickType.DOUBLE_CLICK){
return; return;
} }
Panel panel = plugin.openPanels.getOpenPanel(p.getName()); //this is the panel cf section
if(e.getSlot() == -999){return;} //set the panel to the top panel
Panel panel = plugin.openPanels.getOpenPanel(p.getName(),PanelPosition.Top);
if(e.getAction() == InventoryAction.MOVE_TO_OTHER_INVENTORY){ if(e.getAction() == InventoryAction.MOVE_TO_OTHER_INVENTORY){
e.setCancelled(true); e.setCancelled(true);
} }
if(e.getClickedInventory().getType() == InventoryType.PLAYER){
if(panel.getConfig().isSet("panelType")){ if(e.getSlotType() == InventoryType.SlotType.OUTSIDE){
if(panel.getConfig().getStringList("panelType").contains("unmovable")){ //if the panel is clicked on the outside area of the GUI
e.setCancelled(true); if (panel.getConfig().contains("outside-commands")) {
try {
plugin.commandTags.runCommands(panel,PanelPosition.Top,p, panel.getConfig().getStringList("outside-commands"));
}catch(Exception s){
plugin.debug(s,p);
} }
} }
return; return;
} }
//loop through possible hasvalue/hasperm 1,2,3,etc PanelPosition position = PanelPosition.Top;
if(e.getClickedInventory().getType() == InventoryType.PLAYER) {
if (e.getSlotType() == InventoryType.SlotType.CONTAINER) {
if(plugin.openPanels.hasPanelOpen(p.getName(),PanelPosition.Middle)) {
position = PanelPosition.Middle;
clickedSlot -= 9;
}else{
e.setCancelled(itemsUnmovable(panel));
return;
}
} else{
if(plugin.openPanels.hasPanelOpen(p.getName(),PanelPosition.Bottom)) {
position = PanelPosition.Bottom;
//this is set to cancelled as if the command is to close the panel and there is a hotbar item in the same slot
//it will also trigger the hotbar item after the panel is closed
e.setCancelled(true);
}else{
e.setCancelled(itemsUnmovable(panel));
return;
}
}
}
//the panels proper position
panel = plugin.openPanels.getOpenPanel(p.getName(),position);
//this loops through all the items in the panel //this loops through all the items in the panel
boolean foundSlot = false; boolean foundSlot = false;
for(String slot : Objects.requireNonNull(panel.getConfig().getConfigurationSection("item")).getKeys(false)){ for(String slot : Objects.requireNonNull(panel.getConfig().getConfigurationSection("item")).getKeys(false)){
if(slot.equals(Integer.toString(e.getSlot()))){ if (slot.equals(Integer.toString(clickedSlot))) {
foundSlot = true; foundSlot = true;
break;
} }
} }
if(!foundSlot){ if(!foundSlot){
@ -64,10 +98,11 @@ public class Utils implements Listener {
return; return;
} }
String section = plugin.itemCreate.hasSection(panel,panel.getConfig().getConfigurationSection("item." + e.getSlot()), p); //get the section of the slot that was clicked
String section = plugin.itemCreate.hasSection(panel,position,panel.getConfig().getConfigurationSection("item." + clickedSlot), p);
if(panel.getConfig().contains("item." + e.getSlot() + section + ".itemType")){ if(panel.getConfig().contains("item." + clickedSlot + section + ".itemType")){
if(panel.getConfig().getStringList("item." + e.getSlot() + section + ".itemType").contains("placeable")){ if(panel.getConfig().getStringList("item." + clickedSlot + section + ".itemType").contains("placeable")){
//skip if the item is a placeable //skip if the item is a placeable
e.setCancelled(false); e.setCancelled(false);
return; return;
@ -85,8 +120,8 @@ public class Utils implements Listener {
} }
} }
if(panel.getConfig().contains("item." + e.getSlot() + section + ".commands")) { if(panel.getConfig().contains("item." + clickedSlot + section + ".commands")) {
List<String> commands = panel.getConfig().getStringList("item." + e.getSlot() + section + ".commands"); List<String> commands = panel.getConfig().getStringList("item." + clickedSlot + section + ".commands");
if (commands.size() != 0) { if (commands.size() != 0) {
//this will replace a sequence tag command with the commands from the sequence //this will replace a sequence tag command with the commands from the sequence
List<String> commandsAfterSequence = commands; List<String> commandsAfterSequence = commands;
@ -155,17 +190,25 @@ public class Utils implements Listener {
//end custom command PlaceHolders //end custom command PlaceHolders
//make the command //make the command
String command = plugin.tex.placeholders(panel,p,commands.get(i)); String command = plugin.tex.placeholders(panel,position,p,commands.get(i));
int val = plugin.commandTags.commandPayWall(p,command); PaywallOutput val = plugin.commandTags.commandPayWall(panel,p,command);
if(val == 0){ if(val == PaywallOutput.Blocked){
return; return;
} }
if(val == 2){ if(val == PaywallOutput.NotApplicable){
plugin.commandTags.runCommand(panel, p, commands.get(i)); plugin.commandTags.runCommand(panel,position, p, commands.get(i));
} }
} }
} }
} }
} }
private boolean itemsUnmovable(Panel panel){
if(panel.getConfig().isSet("panelType")){
//cancel event and return to signal no commands and no movement will occur
return panel.getConfig().getStringList("panelType").contains("unmovable");
}
return false;
}
} }

View File

@ -1,6 +1,7 @@
package me.rockyhawk.commandpanels.api; package me.rockyhawk.commandpanels.api;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -9,7 +10,6 @@ import org.bukkit.inventory.ItemStack;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.Set;
public class CommandPanelsAPI { public class CommandPanelsAPI {
CommandPanels plugin; CommandPanels plugin;
@ -19,12 +19,12 @@ public class CommandPanelsAPI {
//returns true if the player has a panel open //returns true if the player has a panel open
public boolean isPanelOpen(Player p){ public boolean isPanelOpen(Player p){
return plugin.openPanels.hasPanelOpen(p.getName()); return plugin.openPanels.hasPanelOpen(p.getName(),PanelPosition.Top);
} }
//get the name of a panel currently open, will return null if panel is not open //get the name of a panel currently open, will return null if panel is not open
public Panel getOpenPanel(Player p){ public Panel getOpenPanel(Player p, PanelPosition position){
return plugin.openPanels.getOpenPanel(p.getName()); return plugin.openPanels.getOpenPanel(p.getName(), position);
} }
//loaded panels in folder //loaded panels in folder
@ -34,9 +34,14 @@ public class CommandPanelsAPI {
//import panel into folder //import panel into folder
public void addPanel(Panel panel) throws IOException{ public void addPanel(Panel panel) throws IOException{
File addedFile = new File(plugin.panelsf + File.separator + panel.getFile().getName()); File addedFile = new File(plugin.panelsf + File.separator + panel.getName() + ".yml");
YamlConfiguration addedYaml = YamlConfiguration.loadConfiguration(panel.getFile()); YamlConfiguration newYaml = new YamlConfiguration();
addedYaml.save(addedFile); if(panel.getConfig().contains("panels")){
newYaml.set("",panel.getConfig());
}else{
newYaml.set("panels." + panel.getName(),panel.getConfig());
}
newYaml.save(addedFile);
plugin.reloadPanelFiles(); plugin.reloadPanelFiles();
} }
@ -61,8 +66,13 @@ public class CommandPanelsAPI {
return null; return null;
} }
//if the players inventory has no panels in it
public boolean hasNormalInventory(Player p){
return plugin.inventorySaver.hasNormalInventory(p);
}
//make custom item using items section //make custom item using items section
public ItemStack makeItem(Player p, ConfigurationSection itemSection){ public ItemStack makeItem(Player p, ConfigurationSection itemSection){
return plugin.itemCreate.makeCustomItemFromConfig(null,itemSection, p, true, true, false); return plugin.itemCreate.makeCustomItemFromConfig(null,PanelPosition.Top,itemSection, p, true, true, false);
} }
} }

View File

@ -2,6 +2,8 @@ package me.rockyhawk.commandpanels.api;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.classresources.placeholders.PanelPlaceholders; import me.rockyhawk.commandpanels.classresources.placeholders.PanelPlaceholders;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelOpenType;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -10,7 +12,6 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import java.io.File; import java.io.File;
import java.util.stream.Collectors;
public class Panel{ public class Panel{
CommandPanels plugin = JavaPlugin.getPlugin(CommandPanels.class); CommandPanels plugin = JavaPlugin.getPlugin(CommandPanels.class);
@ -20,6 +21,7 @@ public class Panel{
private String panelName; private String panelName;
private File panelFile; private File panelFile;
public PanelPlaceholders placeholders = new PanelPlaceholders(); public PanelPlaceholders placeholders = new PanelPlaceholders();
public boolean isOpen = false;
//make the object, using a file is recommended //make the object, using a file is recommended
public Panel(File file, String name){ public Panel(File file, String name){
@ -69,19 +71,19 @@ public class Panel{
} }
public ItemStack getItem(Player p, int slot){ public ItemStack getItem(Player p, int slot){
String section = plugin.itemCreate.hasSection(this,panelConfig.getConfigurationSection("item." + slot), p); String section = plugin.itemCreate.hasSection(this,PanelPosition.Top,panelConfig.getConfigurationSection("item." + slot), p);
ConfigurationSection itemSection = panelConfig.getConfigurationSection("item." + slot + section); ConfigurationSection itemSection = panelConfig.getConfigurationSection("item." + slot + section);
return plugin.itemCreate.makeItemFromConfig(this,itemSection, p, true, true, false); return plugin.itemCreate.makeItemFromConfig(this,PanelPosition.Top,itemSection, p, true, true, false);
} }
public ItemStack getCustomItem(Player p, String itemName){ public ItemStack getCustomItem(Player p, String itemName){
String section = plugin.itemCreate.hasSection(this,panelConfig.getConfigurationSection("custom-item." + itemName), p); String section = plugin.itemCreate.hasSection(this,PanelPosition.Top,panelConfig.getConfigurationSection("custom-item." + itemName), p);
ConfigurationSection itemSection = panelConfig.getConfigurationSection("custom-item." + itemName + section); ConfigurationSection itemSection = panelConfig.getConfigurationSection("custom-item." + itemName + section);
return plugin.itemCreate.makeCustomItemFromConfig(this,itemSection, p, true, true, false); return plugin.itemCreate.makeCustomItemFromConfig(this,PanelPosition.Top,itemSection, p, true, true, false);
} }
public ItemStack getHotbarItem(Player p){ public ItemStack getHotbarItem(Player p){
ItemStack s = plugin.itemCreate.makeItemFromConfig(this,getHotbarSection(p), p, true, true, false); ItemStack s = plugin.itemCreate.makeItemFromConfig(this,PanelPosition.Top,getHotbarSection(p), p, true, true, false);
int slot = -1; int slot = -1;
if(getHotbarSection(p).isSet("stationary")){ if(getHotbarSection(p).isSet("stationary")){
slot = getHotbarSection(p).getInt("stationary"); slot = getHotbarSection(p).getInt("stationary");
@ -89,7 +91,7 @@ public class Panel{
return plugin.nbt.setNBT(s,"CommandPanelsHotbar",panelName + ":" + slot); return plugin.nbt.setNBT(s,"CommandPanelsHotbar",panelName + ":" + slot);
} }
public ConfigurationSection getHotbarSection(Player p){ public ConfigurationSection getHotbarSection(Player p){
String section = plugin.itemCreate.hasSection(this,panelConfig.getConfigurationSection("open-with-item"), p); String section = plugin.itemCreate.hasSection(this,PanelPosition.Top,panelConfig.getConfigurationSection("open-with-item"), p);
return panelConfig.getConfigurationSection("open-with-item" + section); return panelConfig.getConfigurationSection("open-with-item" + section);
} }
@ -97,17 +99,15 @@ public class Panel{
return this.panelConfig.contains("open-with-item"); return this.panelConfig.contains("open-with-item");
} }
//this will make a preview of the inventory using a certain player //this will make a preview of the inventory using a certain player on the top
public Inventory getInventory(Player p){ public Inventory getInventory(Player p){
return plugin.createGUI.openGui(this,p,2,0); return plugin.createGUI.openGui(this,p,PanelPosition.Top, PanelOpenType.Return,0);
} }
//open the panel for the player, it will disable debug mode //open the panel for the player
public void open(Player p){ public void open(Player p, PanelPosition position){
if(plugin.debug.isEnabled(p)){ isOpen = true;
plugin.debug.debugSet.remove(p); plugin.openVoids.openCommandPanel(p, p, this, position, false);
}
plugin.openVoids.openCommandPanel(p, p, this, false);
} }
//create blank clone //create blank clone

View File

@ -1,5 +1,6 @@
package me.rockyhawk.commandpanels.api; package me.rockyhawk.commandpanels.api;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
@ -9,16 +10,22 @@ public class PanelClosedEvent extends Event{
private final Player p; private final Player p;
private final Panel panel; private final Panel panel;
private final PanelPosition pos;
public PanelClosedEvent(Player player, Panel panel) { public PanelClosedEvent(Player player, Panel panel, PanelPosition position) {
this.p = player; this.p = player;
this.panel = panel; this.panel = panel;
this.pos = position;
} }
public Player getPlayer(){ public Player getPlayer(){
return this.p; return this.p;
} }
public PanelPosition getPosition(){
return this.pos;
}
public Inventory getInventory(){ public Inventory getInventory(){
return this.p.getInventory(); return this.p.getInventory();
} }

View File

@ -1,5 +1,6 @@
package me.rockyhawk.commandpanels.api; package me.rockyhawk.commandpanels.api;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.Event; import org.bukkit.event.Event;
@ -11,6 +12,7 @@ public class PanelOpenedEvent extends Event implements Cancellable {
private boolean isCancelled; private boolean isCancelled;
private final Player p; private final Player p;
private final Panel panel; private final Panel panel;
private final PanelPosition pos;
public boolean isCancelled() { public boolean isCancelled() {
return this.isCancelled; return this.isCancelled;
@ -20,9 +22,14 @@ public class PanelOpenedEvent extends Event implements Cancellable {
this.isCancelled = isCancelled; this.isCancelled = isCancelled;
} }
public PanelOpenedEvent(Player player, Panel panel) { public PanelOpenedEvent(Player player, Panel panel, PanelPosition position) {
this.p = player; this.p = player;
this.panel = panel; this.panel = panel;
this.pos = position;
}
public PanelPosition getPosition(){
return this.pos;
} }
public Player getPlayer(){ public Player getPlayer(){

View File

@ -0,0 +1,60 @@
package me.rockyhawk.commandpanels.api;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
public class PanelsInterface {
public String playerName;
private Panel top,middle,bottom = null;
public PanelsInterface(String player){
playerName = player;
}
//if all panels are closed
public boolean allClosed(){
return top == null && middle == null && bottom == null;
}
//get the panels based on position
public void setPanel(Panel panel, PanelPosition position){
switch(position){
case Top:{
if(panel == null && top != null){
top.isOpen = false;
}
top = panel;
return;
}
case Middle:{
if(panel == null && middle != null){
middle.isOpen = false;
}
middle = panel;
return;
}
case Bottom:{
if(panel == null && bottom != null){
bottom.isOpen = false;
}
bottom = panel;
}
}
}
//get the panels based on position
public Panel getPanel(PanelPosition position){
switch(position){
case Top:{
return top;
}
case Middle:{
return middle;
}
case Bottom:{
return bottom;
}
}
return null;
}
}

View File

@ -3,6 +3,9 @@ package me.rockyhawk.commandpanels.classresources;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.api.Panel;
import me.rockyhawk.commandpanels.api.PanelOpenedEvent; import me.rockyhawk.commandpanels.api.PanelOpenedEvent;
import me.rockyhawk.commandpanels.commandtags.PaywallOutput;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelOpenType;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Sound; import org.bukkit.Sound;
@ -21,7 +24,7 @@ public class ExecuteOpenVoids {
} }
//this is the main method to open a panel //this is the main method to open a panel
public void openCommandPanel(CommandSender sender, Player p, Panel panel, boolean openForOtherUser){ public void openCommandPanel(CommandSender sender, Player p, Panel panel, PanelPosition position, boolean openForOtherUser){
if(p.isSleeping()){ if(p.isSleeping()){
//avoid plugin glitches when sleeping //avoid plugin glitches when sleeping
return; return;
@ -42,38 +45,34 @@ public class ExecuteOpenVoids {
return; return;
} }
if(position != PanelPosition.Top && !plugin.openPanels.hasPanelOpen(p.getName(),PanelPosition.Top)){
sender.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.RED + "Cannot open a panel without a panel at the top already."));
return;
}
//close any foreign GUIs for CommandPanels //close any foreign GUIs for CommandPanels
if(!plugin.openPanels.hasPanelOpen(p.getName()) && p.getOpenInventory().getType() != InventoryType.CRAFTING){ if(!plugin.openPanels.hasPanelOpen(p.getName(),PanelPosition.Top) && p.getOpenInventory().getType() != InventoryType.CRAFTING){
p.closeInventory(); p.closeInventory();
} }
//fire PanelOpenedEvent //fire PanelOpenedEvent
PanelOpenedEvent openedEvent = new PanelOpenedEvent(p,panel); PanelOpenedEvent openedEvent = new PanelOpenedEvent(p,panel,position);
Bukkit.getPluginManager().callEvent(openedEvent); Bukkit.getPluginManager().callEvent(openedEvent);
if(openedEvent.isCancelled()){ if(openedEvent.isCancelled()){
return; return;
} }
//do these commands before the panel loads //do these commands before the panel loads
beforeLoadCommands(panel,p); beforeLoadCommands(panel,position,p);
try { try {
//create and open the GUI //create and open the GUI
plugin.createGUI.openGui(panel, p,1,0); plugin.createGUI.openGui(panel, p, position,PanelOpenType.Normal,0);
//execute commands once the panel opens //execute commands once the panel opens
if (panel.getConfig().contains("commands-on-open")) { if (panel.getConfig().contains("commands-on-open")) {
try { try {
List<String> commands = panel.getConfig().getStringList("commands-on-open"); plugin.commandTags.runCommands(panel,position,p, panel.getConfig().getStringList("commands-on-open"));
for (String command : commands) {
int val = plugin.commandTags.commandPayWall(p, command);
if (val == 0) {
break;
}
if (val == 2) {
plugin.commandTags.runCommand(panel,p, command);
}
}
}catch(Exception s){ }catch(Exception s){
p.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.error") + " " + "commands-on-open: " + panel.getConfig().getString("commands-on-open"))); p.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.error") + " " + "commands-on-open: " + panel.getConfig().getString("commands-on-open")));
} }
@ -96,7 +95,7 @@ public class ExecuteOpenVoids {
} catch (Exception r) { } catch (Exception r) {
plugin.debug(r,null); plugin.debug(r,null);
sender.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.error"))); sender.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.error")));
plugin.openPanels.closePanelForLoader(p.getName()); plugin.openPanels.closePanelForLoader(p.getName(),position);
p.closeInventory(); p.closeInventory();
} }
}else{ }else{
@ -139,21 +138,11 @@ public class ExecuteOpenVoids {
sender.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.perms"))); sender.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.perms")));
} }
public void beforeLoadCommands(Panel panel, Player p){ public void beforeLoadCommands(Panel panel,PanelPosition pos, Player p){
if (panel.getConfig().contains("pre-load-commands")) { if (panel.getConfig().contains("pre-load-commands")) {
try { try {
List<String> commands = panel.getConfig().getStringList("pre-load-commands"); plugin.commandTags.runCommands(panel,pos,p, panel.getConfig().getStringList("pre-load-commands"));
for (String command : commands) {
int val = plugin.commandTags.commandPayWall(p, command);
if (val == 0) {
break;
}
if (val == 2) {
plugin.commandTags.runCommand(panel,p, command);
}
}
}catch(Exception s){ }catch(Exception s){
p.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.error") + " " + "pre-load-commands: " + panel.getConfig().getString("pre-load-commands")));
plugin.debug(s,p); plugin.debug(s,p);
} }
} }

View File

@ -5,6 +5,7 @@ import me.arcaniax.hdb.api.HeadDatabaseAPI;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.api.Panel;
import me.rockyhawk.commandpanels.ioclasses.legacy.MinecraftVersions; import me.rockyhawk.commandpanels.ioclasses.legacy.MinecraftVersions;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import net.Indyuce.mmoitems.MMOItems; import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem; import net.Indyuce.mmoitems.api.item.mmoitem.MMOItem;
import net.Indyuce.mmoitems.manager.ItemManager; import net.Indyuce.mmoitems.manager.ItemManager;
@ -40,8 +41,8 @@ public class ItemCreation {
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public ItemStack makeItemFromConfig(Panel panel, ConfigurationSection itemSection, Player p, boolean placeholders, boolean colours, boolean addNBT){ public ItemStack makeItemFromConfig(Panel panel, PanelPosition position, ConfigurationSection itemSection, Player p, boolean placeholders, boolean colours, boolean addNBT){
String material = plugin.tex.placeholdersNoColour(panel,p,itemSection.getString("material")); String material = plugin.tex.placeholdersNoColour(panel,position,p,itemSection.getString("material"));
try { try {
if (Objects.requireNonNull(material).equalsIgnoreCase("AIR")) { if (Objects.requireNonNull(material).equalsIgnoreCase("AIR")) {
return null; return null;
@ -120,7 +121,7 @@ public class ItemCreation {
BookMeta bookMeta = (BookMeta) s.getItemMeta(); BookMeta bookMeta = (BookMeta) s.getItemMeta();
bookMeta.setTitle(matraw.split("\\s")[1]); bookMeta.setTitle(matraw.split("\\s")[1]);
bookMeta.setAuthor(matraw.split("\\s")[1]); bookMeta.setAuthor(matraw.split("\\s")[1]);
List<String> bookLines = plugin.tex.placeholdersList(panel,p,itemSection.getStringList("write"),true); List<String> bookLines = plugin.tex.placeholdersList(panel,position,p,itemSection.getStringList("write"),true);
String result = bookLines.stream().map(String::valueOf).collect(Collectors.joining("\n" + ChatColor.RESET, "", "")); String result = bookLines.stream().map(String::valueOf).collect(Collectors.joining("\n" + ChatColor.RESET, "", ""));
bookMeta.setPages(result); bookMeta.setPages(result);
s.setItemMeta(bookMeta); s.setItemMeta(bookMeta);
@ -129,7 +130,7 @@ public class ItemCreation {
//creates item from custom-items section of panel //creates item from custom-items section of panel
if(matraw.split("\\s")[0].equalsIgnoreCase("cpi=")){ if(matraw.split("\\s")[0].equalsIgnoreCase("cpi=")){
s = makeCustomItemFromConfig(panel,plugin.openPanels.getOpenPanel(p.getName()).getConfig().getConfigurationSection("custom-item." + matraw.split("\\s")[1]), p, true, true, true); s = makeCustomItemFromConfig(panel,position,panel.getConfig().getConfigurationSection("custom-item." + matraw.split("\\s")[1]), p, true, true, true);
normalCreation = false; normalCreation = false;
} }
@ -155,12 +156,12 @@ public class ItemCreation {
meta.setOwner(p.getName()); meta.setOwner(p.getName());
} }
s.setItemMeta(meta); s.setItemMeta(meta);
}else if (plugin.tex.placeholdersNoColour(panel,p,matraw.split("\\s")[1]).length() <= 16) { }else if (plugin.tex.placeholdersNoColour(panel,position,p,matraw.split("\\s")[1]).length() <= 16) {
//if cps= username //if cps= username
s = plugin.customHeads.getPlayerHead(plugin.tex.placeholdersNoColour(panel,p,matraw.split("\\s")[1])); s = plugin.customHeads.getPlayerHead(plugin.tex.placeholdersNoColour(panel,position,p,matraw.split("\\s")[1]));
} else { } else {
//custom data cps= base64 //custom data cps= base64
s = plugin.customHeads.getCustomHead(plugin.tex.placeholdersNoColour(panel,p,matraw.split("\\s")[1])); s = plugin.customHeads.getCustomHead(plugin.tex.placeholdersNoColour(panel,position,p,matraw.split("\\s")[1]));
} }
} catch (Exception var32) { } catch (Exception var32) {
p.sendMessage(plugin.tex.colour( plugin.tag + plugin.config.getString("config.format.error") + " head material: Could not load skull")); p.sendMessage(plugin.tex.colour( plugin.tag + plugin.config.getString("config.format.error") + " head material: Could not load skull"));
@ -212,7 +213,7 @@ public class ItemCreation {
This will do maps from custom images This will do maps from custom images
the maps will be in the 'maps' folder, so the maps will be in the 'maps' folder, so
CommandPanels/maps/image.png <-- here CommandPanels/maps/image.png <-- here
CommandPanels/panels/example.yml CommandPanels/panels/example_top.yml
The images should be 128x128 The images should be 128x128
*/ */
try{ try{
@ -265,7 +266,7 @@ public class ItemCreation {
if (itemSection.contains("customdata")) { if (itemSection.contains("customdata")) {
ItemMeta customMeta = s.getItemMeta(); ItemMeta customMeta = s.getItemMeta();
assert customMeta != null; assert customMeta != null;
customMeta.setCustomModelData(Integer.parseInt(Objects.requireNonNull(itemSection.getString("customdata")))); customMeta.setCustomModelData(Integer.parseInt(plugin.tex.placeholders(panel,position,p,itemSection.getString("customdata"))));
s.setItemMeta(customMeta); s.setItemMeta(customMeta);
} }
try { try {
@ -335,7 +336,7 @@ public class ItemCreation {
//if the damage is not unbreakable and should be a value //if the damage is not unbreakable and should be a value
if (plugin.legacy.LOCAL_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_12)) { if (plugin.legacy.LOCAL_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_12)) {
try { try {
s.setDurability(Short.parseShort(Objects.requireNonNull(plugin.tex.placeholders(panel,p, itemSection.getString("damage"))))); s.setDurability(Short.parseShort(Objects.requireNonNull(plugin.tex.placeholders(panel,position,p, itemSection.getString("damage")))));
} catch (Exception e) { } catch (Exception e) {
plugin.debug(e, p); plugin.debug(e, p);
p.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.error") + " damage: " + itemSection.getString("damage"))); p.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.error") + " damage: " + itemSection.getString("damage")));
@ -350,7 +351,7 @@ public class ItemCreation {
try { try {
Damageable itemDamage = (Damageable) s.getItemMeta(); Damageable itemDamage = (Damageable) s.getItemMeta();
itemDamage.setDamage(Integer.parseInt(Objects.requireNonNull(plugin.tex.placeholders(panel,p, itemSection.getString("damage"))))); itemDamage.setDamage(Integer.parseInt(Objects.requireNonNull(plugin.tex.placeholders(panel,position,p, itemSection.getString("damage")))));
s.setItemMeta((ItemMeta) itemDamage); s.setItemMeta((ItemMeta) itemDamage);
} catch (Exception e) { } catch (Exception e) {
plugin.debug(e, p); plugin.debug(e, p);
@ -365,7 +366,7 @@ public class ItemCreation {
} }
if (itemSection.contains("stack")) { if (itemSection.contains("stack")) {
//change the stack amount (placeholders accepted) //change the stack amount (placeholders accepted)
s.setAmount((int)Double.parseDouble(Objects.requireNonNull(plugin.tex.placeholders(panel,p,itemSection.getString("stack"))))); s.setAmount((int)Double.parseDouble(Objects.requireNonNull(plugin.tex.placeholders(panel,position,p,itemSection.getString("stack")))));
} }
} catch (IllegalArgumentException | NullPointerException var33) { } catch (IllegalArgumentException | NullPointerException var33) {
plugin.debug(var33,p); plugin.debug(var33,p);
@ -377,16 +378,16 @@ public class ItemCreation {
} }
//do custom-item items, they have an additional hasSection requirement //do custom-item items, they have an additional hasSection requirement
public ItemStack makeCustomItemFromConfig(Panel panel, ConfigurationSection itemSection, Player p, boolean placeholders, boolean colours, boolean addNBT){ public ItemStack makeCustomItemFromConfig(Panel panel,PanelPosition position, ConfigurationSection itemSection, Player p, boolean placeholders, boolean colours, boolean addNBT){
String section = plugin.itemCreate.hasSection(panel,itemSection,p); String section = plugin.itemCreate.hasSection(panel,position,itemSection,p);
if(!section.equals("")){ if(!section.equals("")){
itemSection = itemSection.getConfigurationSection(section.substring(1)); itemSection = itemSection.getConfigurationSection(section.substring(1));
} }
return plugin.itemCreate.makeItemFromConfig(panel,itemSection, p, placeholders, colours, addNBT); return plugin.itemCreate.makeItemFromConfig(panel,position,itemSection, p, placeholders, colours, addNBT);
} }
//hasperm hasvalue, etc sections will be done here //hasperm hasvalue, etc sections will be done here
public String hasSection(Panel panel, ConfigurationSection cf, Player p){ public String hasSection(Panel panel,PanelPosition position, ConfigurationSection cf, Player p){
if (cf.isSet("hasvalue")) { if (cf.isSet("hasvalue")) {
//this will do the hasvalue without any numbers //this will do the hasvalue without any numbers
boolean outputValue = true; boolean outputValue = true;
@ -395,11 +396,11 @@ public class ItemCreation {
//if output is true, and values match it will be this item, vice versa //if output is true, and values match it will be this item, vice versa
outputValue = cf.getBoolean("hasvalue.output"); outputValue = cf.getBoolean("hasvalue.output");
} }
String value = ChatColor.stripColor(plugin.tex.placeholders(panel,p,cf.getString("hasvalue.value"))); String value = ChatColor.stripColor(plugin.tex.placeholders(panel,position,p,cf.getString("hasvalue.value")));
String compare = ChatColor.stripColor(plugin.tex.placeholders(panel,p,cf.getString("hasvalue.compare"))); String compare = ChatColor.stripColor(plugin.tex.placeholders(panel,position,p,cf.getString("hasvalue.compare")));
if (compare.equals(value) == outputValue) { if (compare.equals(value) == outputValue) {
//onOpen being 3 means it is the editor panel.. hasvalue items cannot be included to avoid item breaking //onOpen being 3 means it is the editor panel.. hasvalue items cannot be included to avoid item breaking
String section = hasSection(panel,Objects.requireNonNull(cf.getConfigurationSection("hasvalue")), p); String section = hasSection(panel,position,Objects.requireNonNull(cf.getConfigurationSection("hasvalue")), p);
//string section, it executes itself to check for subsections //string section, it executes itself to check for subsections
return ".hasvalue" + section; return ".hasvalue" + section;
} }
@ -412,11 +413,11 @@ public class ItemCreation {
//if output is true, and values match it will be this item, vice versa //if output is true, and values match it will be this item, vice versa
outputValue = cf.getBoolean("hasvalue" + count + ".output"); outputValue = cf.getBoolean("hasvalue" + count + ".output");
} }
value = ChatColor.stripColor(plugin.tex.placeholders(panel,p,cf.getString("hasvalue" + count + ".value"))); value = ChatColor.stripColor(plugin.tex.placeholders(panel,position,p,cf.getString("hasvalue" + count + ".value")));
compare = ChatColor.stripColor(plugin.tex.placeholders(panel,p,cf.getString("hasvalue" + count + ".compare"))); compare = ChatColor.stripColor(plugin.tex.placeholders(panel,position,p,cf.getString("hasvalue" + count + ".compare")));
if (compare.equals(value) == outputValue) { if (compare.equals(value) == outputValue) {
//onOpen being 3 means it is the editor panel.. hasvalue items cannot be included to avoid item breaking //onOpen being 3 means it is the editor panel.. hasvalue items cannot be included to avoid item breaking
String section = hasSection(panel,Objects.requireNonNull(cf.getConfigurationSection("hasvalue" + count)), p); String section = hasSection(panel,position,Objects.requireNonNull(cf.getConfigurationSection("hasvalue" + count)), p);
//string section, it executes itself to check for subsections //string section, it executes itself to check for subsections
return ".hasvalue" + count + section; return ".hasvalue" + count + section;
} }
@ -431,11 +432,11 @@ public class ItemCreation {
//if output is true, and values match it will be this item, vice versa //if output is true, and values match it will be this item, vice versa
outputValue = cf.getBoolean("hasgreater.output"); outputValue = cf.getBoolean("hasgreater.output");
} }
double value = Double.parseDouble(ChatColor.stripColor(plugin.tex.placeholdersNoColour(panel,p,cf.getString("hasgreater.value")))); double value = Double.parseDouble(ChatColor.stripColor(plugin.tex.placeholdersNoColour(panel,position,p,cf.getString("hasgreater.value"))));
double compare = Double.parseDouble(ChatColor.stripColor(plugin.tex.placeholdersNoColour(panel,p,cf.getString("hasgreater.compare")))); double compare = Double.parseDouble(ChatColor.stripColor(plugin.tex.placeholdersNoColour(panel,position,p,cf.getString("hasgreater.compare"))));
if ((compare >= value) == outputValue) { if ((compare >= value) == outputValue) {
//onOpen being 3 means it is the editor panel.. hasgreater items cannot be included to avoid item breaking //onOpen being 3 means it is the editor panel.. hasgreater items cannot be included to avoid item breaking
String section = hasSection(panel,Objects.requireNonNull(cf.getConfigurationSection("hasgreater")), p); String section = hasSection(panel,position,Objects.requireNonNull(cf.getConfigurationSection("hasgreater")), p);
return ".hasgreater" + section; return ".hasgreater" + section;
} }
//loop through possible hasgreater 1,2,3,etc //loop through possible hasgreater 1,2,3,etc
@ -447,11 +448,11 @@ public class ItemCreation {
//if output is true, and values match it will be this item, vice versa //if output is true, and values match it will be this item, vice versa
outputValue = cf.getBoolean("hasgreater" + count + ".output"); outputValue = cf.getBoolean("hasgreater" + count + ".output");
} }
value = Double.parseDouble(ChatColor.stripColor(plugin.tex.placeholdersNoColour(panel,p,cf.getString("hasgreater" + count + ".value")))); value = Double.parseDouble(ChatColor.stripColor(plugin.tex.placeholdersNoColour(panel,position,p,cf.getString("hasgreater" + count + ".value"))));
compare = Double.parseDouble(ChatColor.stripColor(plugin.tex.placeholdersNoColour(panel,p,cf.getString("hasgreater" + count + ".compare")))); compare = Double.parseDouble(ChatColor.stripColor(plugin.tex.placeholdersNoColour(panel,position,p,cf.getString("hasgreater" + count + ".compare"))));
if ((compare >= value) == outputValue) { if ((compare >= value) == outputValue) {
//onOpen being 3 means it is the editor panel.. hasgreater items cannot be included to avoid item breaking //onOpen being 3 means it is the editor panel.. hasgreater items cannot be included to avoid item breaking
String section = hasSection(panel,Objects.requireNonNull(cf.getConfigurationSection("hasgreater" + count)), p); String section = hasSection(panel,position,Objects.requireNonNull(cf.getConfigurationSection("hasgreater" + count)), p);
return ".hasgreater" + count + section; return ".hasgreater" + count + section;
} }
} }
@ -466,7 +467,7 @@ public class ItemCreation {
outputValue = cf.getBoolean("hasperm.output"); outputValue = cf.getBoolean("hasperm.output");
} }
if (p.hasPermission(Objects.requireNonNull(cf.getString("hasperm.perm"))) == outputValue) { if (p.hasPermission(Objects.requireNonNull(cf.getString("hasperm.perm"))) == outputValue) {
String section = hasSection(panel,Objects.requireNonNull(cf.getConfigurationSection("hasperm")), p); String section = hasSection(panel,position,Objects.requireNonNull(cf.getConfigurationSection("hasperm")), p);
return ".hasperm" + section; return ".hasperm" + section;
} }
for(int count = 0; cf.getKeys(false).size() > count; count++){ for(int count = 0; cf.getKeys(false).size() > count; count++){
@ -478,7 +479,7 @@ public class ItemCreation {
outputValue = cf.getBoolean("hasperm" + count + ".output"); outputValue = cf.getBoolean("hasperm" + count + ".output");
} }
if (p.hasPermission(Objects.requireNonNull(cf.getString("hasperm" + count + ".perm"))) == outputValue) { if (p.hasPermission(Objects.requireNonNull(cf.getString("hasperm" + count + ".perm"))) == outputValue) {
String section = hasSection(panel,Objects.requireNonNull(cf.getConfigurationSection("hasperm" + count)), p); String section = hasSection(panel,position,Objects.requireNonNull(cf.getConfigurationSection("hasperm" + count)), p);
return ".hasperm" + count + section; return ".hasperm" + count + section;
} }
} }

View File

@ -1,5 +1,4 @@
package me.rockyhawk.commandpanels.classresources.item_fall; package me.rockyhawk.commandpanels.classresources.item_fall;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.PanelClosedEvent; import me.rockyhawk.commandpanels.api.PanelClosedEvent;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -22,6 +21,7 @@ public class ItemFallManager implements Listener {
public void run(){ public void run(){
for(String item : e.getPanel().getConfig().getConfigurationSection("item").getKeys(false)){ for(String item : e.getPanel().getConfig().getConfigurationSection("item").getKeys(false)){
if(e.getPanel().getConfig().isSet("item." + item + ".itemType")){ if(e.getPanel().getConfig().isSet("item." + item + ".itemType")){
//either the panel will drop the item or it will return to the inventory, no option to do both obviously
if(e.getPanel().getConfig().getStringList("item." + item + ".itemType").contains("dropItem")){ if(e.getPanel().getConfig().getStringList("item." + item + ".itemType").contains("dropItem")){
ItemStack stack = e.getPlayer().getOpenInventory().getTopInventory().getItem(Integer.parseInt(item)); ItemStack stack = e.getPlayer().getOpenInventory().getTopInventory().getItem(Integer.parseInt(item));
if(stack == null || stack.getType() == Material.AIR){ if(stack == null || stack.getType() == Material.AIR){
@ -36,6 +36,12 @@ public class ItemFallManager implements Listener {
} }
e.getPlayer().getWorld().dropItem(e.getPlayer().getLocation(),stack); e.getPlayer().getWorld().dropItem(e.getPlayer().getLocation(),stack);
}else if(e.getPanel().getConfig().getStringList("item." + item + ".itemType").contains("returnItem")){
ItemStack stack = e.getPlayer().getOpenInventory().getTopInventory().getItem(Integer.parseInt(item));
if(stack == null || stack.getType() == Material.AIR){
continue;
}
plugin.inventorySaver.addItem(e.getPlayer(),stack);
} }
} }
} }

View File

@ -3,6 +3,7 @@ package me.rockyhawk.commandpanels.classresources.placeholders;
import me.clip.placeholderapi.PlaceholderAPI; import me.clip.placeholderapi.PlaceholderAPI;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.api.Panel;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -16,9 +17,9 @@ public class CreateText {
} }
//CommandPanels send message function with all placeholders //CommandPanels send message function with all placeholders
public void sendMessage(Panel panel, Player p, String message){ public void sendMessage(Panel panel,PanelPosition position, Player p, String message){
if(!message.equals("")) { if(!message.equals("")) {
p.sendMessage(placeholders(panel, p,plugin.tag + message)); p.sendMessage(placeholders(panel,position, p,plugin.tag + message));
} }
} }
@ -37,11 +38,11 @@ public class CreateText {
} }
//papi except if it is a String List //papi except if it is a String List
public List<String> placeholdersNoColour(Panel panel, Player p, List<String> setpapi) { public List<String> placeholdersNoColour(Panel panel,PanelPosition position, Player p, List<String> setpapi) {
try { try {
int tempInt = 0; int tempInt = 0;
for (String temp : setpapi) { for (String temp : setpapi) {
setpapi.set(tempInt, attachPlaceholders(panel, p, temp)); setpapi.set(tempInt, attachPlaceholders(panel,position, p, temp));
tempInt += 1; tempInt += 1;
} }
}catch(Exception ignore){ }catch(Exception ignore){
@ -52,12 +53,12 @@ public class CreateText {
} }
//papi except if it is a String List //papi except if it is a String List
public List<String> placeholdersList(Panel panel, Player p, List<String> setpapi, boolean placeholder) { public List<String> placeholdersList(Panel panel,PanelPosition position, Player p, List<String> setpapi, boolean placeholder) {
try { try {
if(placeholder) { if(placeholder) {
int tempInt = 0; int tempInt = 0;
for (String temp : setpapi) { for (String temp : setpapi) {
setpapi.set(tempInt, attachPlaceholders(panel, p, temp)); setpapi.set(tempInt, attachPlaceholders(panel,position, p, temp));
tempInt += 1; tempInt += 1;
} }
} }
@ -84,9 +85,9 @@ public class CreateText {
} }
//string papi with no colours //string papi with no colours
public String placeholdersNoColour(Panel panel, Player p, String setpapi) { public String placeholdersNoColour(Panel panel, PanelPosition position, Player p, String setpapi) {
try { try {
setpapi = attachPlaceholders(panel, p,setpapi); setpapi = attachPlaceholders(panel,position, p,setpapi);
return setpapi; return setpapi;
}catch(NullPointerException e){ }catch(NullPointerException e){
return setpapi; return setpapi;
@ -94,9 +95,9 @@ public class CreateText {
} }
//regular string papi //regular string papi
public String placeholders(Panel panel, Player p, String setpapi) { public String placeholders(Panel panel, PanelPosition position, Player p, String setpapi) {
try { try {
setpapi = attachPlaceholders(panel, p,setpapi); setpapi = attachPlaceholders(panel,position, p,setpapi);
setpapi = plugin.hex.translateHexColorCodes(ChatColor.translateAlternateColorCodes('&', setpapi)); setpapi = plugin.hex.translateHexColorCodes(ChatColor.translateAlternateColorCodes('&', setpapi));
return setpapi; return setpapi;
}catch(NullPointerException e){ }catch(NullPointerException e){
@ -104,14 +105,14 @@ public class CreateText {
} }
} }
public String attachPlaceholders(Panel panel, Player p, String input){ public String attachPlaceholders(Panel panel, PanelPosition position, Player p, String input){
//do all the placeholders in order to fill into text //do all the placeholders in order to fill into text
input = plugin.placeholders.setPlaceholders(panel, p, input, false); input = plugin.placeholders.setPlaceholders(panel,position, p, input, false);
if (plugin.getServer().getPluginManager().isPluginEnabled("PlaceholderAPI")) { if (plugin.getServer().getPluginManager().isPluginEnabled("PlaceholderAPI")) {
OfflinePlayer offp = plugin.getServer().getOfflinePlayer(p.getUniqueId()); OfflinePlayer offp = plugin.getServer().getOfflinePlayer(p.getUniqueId());
input = PlaceholderAPI.setPlaceholders(offp, input); input = PlaceholderAPI.setPlaceholders(offp, input);
} }
input = plugin.placeholders.setPlaceholders(panel, p, input, true); input = plugin.placeholders.setPlaceholders(panel,position, p, input, true);
return input; return input;
} }
} }

View File

@ -5,6 +5,7 @@ import me.realized.tokenmanager.api.TokenManager;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.api.Panel;
import me.rockyhawk.commandpanels.ioclasses.legacy.MinecraftVersions; import me.rockyhawk.commandpanels.ioclasses.legacy.MinecraftVersions;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -23,7 +24,7 @@ public class Placeholders {
this.plugin = pl; this.plugin = pl;
} }
public String setPlaceholders(Panel panel, Player p, String str, boolean primary){ public String setPlaceholders(Panel panel,PanelPosition position, Player p, String str, boolean primary){
String[] HOLDERS = getPlaceholderEnds(panel,primary); String[] HOLDERS = getPlaceholderEnds(panel,primary);
while (str.contains(HOLDERS[0] + "cp-")) { while (str.contains(HOLDERS[0] + "cp-")) {
try { try {
@ -32,7 +33,7 @@ public class Placeholders {
String identifier = str.substring(start, end).replace(HOLDERS[0] + "cp-", "").replace(HOLDERS[1], ""); String identifier = str.substring(start, end).replace(HOLDERS[0] + "cp-", "").replace(HOLDERS[1], "");
String value; String value;
try { try {
value = doCpPlaceholders(panel,p,identifier, str); value = cpPlaceholders(panel,position,p,identifier, str);
} catch (NullPointerException er) { } catch (NullPointerException er) {
value = ""; value = "";
} }
@ -68,7 +69,7 @@ public class Placeholders {
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
private String doCpPlaceholders(Panel panel, Player p, String identifier, String string){ private String cpPlaceholders(Panel panel, PanelPosition position, Player p, String identifier, String string){
//do player input placeholder first //do player input placeholder first
if (identifier.equals("player-input")) { if (identifier.equals("player-input")) {
@ -82,7 +83,7 @@ public class Placeholders {
List<String> inputMessages = new ArrayList<String>(plugin.config.getStringList("config.input-message")); List<String> inputMessages = new ArrayList<String>(plugin.config.getStringList("config.input-message"));
for (String temp : inputMessages) { for (String temp : inputMessages) {
temp = temp.replaceAll("%cp-args%", Objects.requireNonNull(plugin.config.getString("config.input-cancel"))); temp = temp.replaceAll("%cp-args%", Objects.requireNonNull(plugin.config.getString("config.input-cancel")));
p.sendMessage(plugin.tex.placeholders(panel,p, temp)); p.sendMessage(plugin.tex.placeholders(panel,position,p, temp));
} }
return "cpc"; return "cpc";
} }
@ -251,13 +252,13 @@ public class Placeholders {
try { try {
//if it is a regular custom item //if it is a regular custom item
ItemStack confItm = plugin.itemCreate.makeItemFromConfig(panel,plugin.openPanels.getOpenPanel(p.getName()).getConfig().getConfigurationSection("custom-item." + matLoc),p,true,true, false); ItemStack confItm = plugin.itemCreate.makeItemFromConfig(panel,position,panel.getConfig().getConfigurationSection("custom-item." + matLoc),p,true,true, false);
if(plugin.itemCreate.isIdentical(confItm,itm)){ if(plugin.itemCreate.isIdentical(confItm,itm)){
isIdentical = true; isIdentical = true;
} }
//if custom item is an mmo item (1.14+ for the API) //if custom item is an mmo item (1.14+ for the API)
String customItemMaterial = plugin.openPanels.getOpenPanel(p.getName()).getConfig().getString("custom-item." + matLoc + ".material"); String customItemMaterial = panel.getConfig().getString("custom-item." + matLoc + ".material");
if (plugin.getServer().getPluginManager().isPluginEnabled("MMOItems") && customItemMaterial.startsWith("mmo=")) { if (plugin.getServer().getPluginManager().isPluginEnabled("MMOItems") && customItemMaterial.startsWith("mmo=")) {
String mmoType = customItemMaterial.split("\\s")[1]; String mmoType = customItemMaterial.split("\\s")[1];
String mmoID = customItemMaterial.split("\\s")[2]; String mmoID = customItemMaterial.split("\\s")[2];
@ -311,7 +312,7 @@ public class Placeholders {
try { try {
String point_value = identifier.replace("cp-setdata-", ""); String point_value = identifier.replace("cp-setdata-", "");
String command = "set-data= " + point_value.split(",")[0] + " " + point_value.split(",")[1]; String command = "set-data= " + point_value.split(",")[0] + " " + point_value.split(",")[1];
plugin.commandTags.runCommand(panel,p, command); plugin.commandTags.runCommand(panel,position,p, command);
return ""; return "";
}catch (Exception ex){ }catch (Exception ex){
plugin.debug(ex,p); plugin.debug(ex,p);
@ -323,7 +324,7 @@ public class Placeholders {
try { try {
String point_value = identifier.replace("mathdata-", ""); String point_value = identifier.replace("mathdata-", "");
String command = "math-data= " + point_value.split(",")[0] + " " + point_value.split(",")[1]; String command = "math-data= " + point_value.split(",")[0] + " " + point_value.split(",")[1];
plugin.commandTags.runCommand(panel,p,command); plugin.commandTags.runCommand(panel,position,p,command);
return ""; return "";
}catch (Exception ex){ }catch (Exception ex){
plugin.debug(ex,p); plugin.debug(ex,p);

View File

@ -2,6 +2,7 @@ package me.rockyhawk.commandpanels.commands;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.api.Panel;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
@ -49,7 +50,7 @@ public class Commandpanel implements CommandExecutor {
if(args.length == 2){ if(args.length == 2){
if(!args[1].equals("item")){ if(!args[1].equals("item")){
if(!disableCommand) { if(!disableCommand) {
plugin.openVoids.openCommandPanel(sender, plugin.getServer().getPlayer(args[1]), panel.copy(), true); plugin.openVoids.openCommandPanel(sender, plugin.getServer().getPlayer(args[1]), panel.copy(), PanelPosition.Top, true);
} }
}else{ }else{
sender.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.RED + "Usage: /cp <panel> [item] [player]")); sender.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.RED + "Usage: /cp <panel> [item] [player]"));
@ -72,7 +73,7 @@ public class Commandpanel implements CommandExecutor {
//do player command //do player command
if (args.length == 1) { if (args.length == 1) {
if(!disableCommand) { if(!disableCommand) {
plugin.openVoids.openCommandPanel(sender, p, panel.copy(), false); plugin.openVoids.openCommandPanel(sender, p, panel.copy(),PanelPosition.Top, false);
} }
return true; return true;
}else if(args.length == 2){ }else if(args.length == 2){
@ -80,7 +81,7 @@ public class Commandpanel implements CommandExecutor {
plugin.openVoids.giveHotbarItem(sender, p, panel, false); plugin.openVoids.giveHotbarItem(sender, p, panel, false);
}else{ }else{
if(!disableCommand) { if(!disableCommand) {
plugin.openVoids.openCommandPanel(sender, plugin.getServer().getPlayer(args[1]), panel.copy(), true); plugin.openVoids.openCommandPanel(sender, plugin.getServer().getPlayer(args[1]), panel.copy(),PanelPosition.Top, true);
} }
} }
return true; return true;

View File

@ -2,12 +2,12 @@ package me.rockyhawk.commandpanels.commands;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.api.Panel;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -24,6 +24,14 @@ public class Commandpanelsreload implements CommandExecutor {
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (label.equalsIgnoreCase("cpr") || label.equalsIgnoreCase("commandpanelreload") || label.equalsIgnoreCase("cpanelr")) { if (label.equalsIgnoreCase("cpr") || label.equalsIgnoreCase("commandpanelreload") || label.equalsIgnoreCase("cpanelr")) {
if (sender.hasPermission("commandpanel.reload")) { if (sender.hasPermission("commandpanel.reload")) {
//close all the panels
for(String name : plugin.openPanels.openPanels.keySet()){
plugin.openPanels.closePanelForLoader(name, PanelPosition.Top);
try {
Bukkit.getPlayer(name).closeInventory();
}catch (Exception ignore){}
}
plugin.reloadPanelFiles(); plugin.reloadPanelFiles();
if(new File(plugin.getDataFolder() + File.separator + "temp.yml").delete()){ if(new File(plugin.getDataFolder() + File.separator + "temp.yml").delete()){
//empty //empty
@ -55,7 +63,6 @@ public class Commandpanelsreload implements CommandExecutor {
//this will require a server restart for new commands //this will require a server restart for new commands
public void registerCommands(){ public void registerCommands(){
ConfigurationSection tempFile;
File commandsLoc = new File("commands.yml"); File commandsLoc = new File("commands.yml");
YamlConfiguration cmdCF; YamlConfiguration cmdCF;
try { try {

View File

@ -18,7 +18,7 @@ public class Commandpanelversion implements CommandExecutor {
if(args.length == 0) { if(args.length == 0) {
if (sender.hasPermission("commandpanel.version")) { if (sender.hasPermission("commandpanel.version")) {
//version command //version command
String latestVersion = plugin.updater.githubNewUpdate(false); String latestVersion = plugin.updater.getLatestVersion(false);
sender.sendMessage(plugin.tex.colour(plugin.tag)); sender.sendMessage(plugin.tex.colour(plugin.tag));
sender.sendMessage(ChatColor.GREEN + "This Version " + ChatColor.GRAY + plugin.getDescription().getVersion()); sender.sendMessage(ChatColor.GREEN + "This Version " + ChatColor.GRAY + plugin.getDescription().getVersion());
sender.sendMessage(ChatColor.GREEN + "Latest Version " + ChatColor.GRAY + latestVersion); sender.sendMessage(ChatColor.GREEN + "Latest Version " + ChatColor.GRAY + latestVersion);

View File

@ -2,6 +2,7 @@ package me.rockyhawk.commandpanels.commandtags;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.api.Panel;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Event; import org.bukkit.event.Event;
@ -14,11 +15,13 @@ public class CommandTagEvent extends Event {
public String[] raw; public String[] raw;
public String[] args; public String[] args;
public String name; public String name;
public PanelPosition pos;
public boolean commandTagUsed = false; public boolean commandTagUsed = false;
public CommandTagEvent(CommandPanels plugin, Panel panel1, Player player, String rawCommand1) { public CommandTagEvent(CommandPanels plugin, Panel panel1, PanelPosition position, Player player, String rawCommand1) {
this.p = player; this.p = player;
this.panel = panel1; this.panel = panel1;
this.pos = position;
//do nopapi= tag (donation feature) which will stop PlaceholderAPI placeholders from executing //do nopapi= tag (donation feature) which will stop PlaceholderAPI placeholders from executing
boolean doApiPlaceholders = true; boolean doApiPlaceholders = true;
@ -40,10 +43,10 @@ public class CommandTagEvent extends Event {
this.name = split[0].trim(); this.name = split[0].trim();
this.raw = split[1].trim().split("\\s"); this.raw = split[1].trim().split("\\s");
if(doApiPlaceholders) { if(doApiPlaceholders) {
this.args = plugin.tex.attachPlaceholders(panel1, player, split[1].trim()).split("\\s"); this.args = plugin.tex.attachPlaceholders(panel1,pos, player, split[1].trim()).split("\\s");
}else{ }else{
this.args = ChatColor.translateAlternateColorCodes('&',plugin.placeholders.setPlaceholders(panel, p,split[1].trim(),false)).split("\\s"); this.args = ChatColor.translateAlternateColorCodes('&',plugin.placeholders.setPlaceholders(panel, pos, p,split[1].trim(),false)).split("\\s");
this.args = ChatColor.translateAlternateColorCodes('&',plugin.placeholders.setPlaceholders(panel, p,split[1].trim(),true)).split("\\s"); this.args = ChatColor.translateAlternateColorCodes('&',plugin.placeholders.setPlaceholders(panel, pos, p,split[1].trim(),true)).split("\\s");
} }
} }

View File

@ -1,5 +1,6 @@
package me.rockyhawk.commandpanels.commandtags; package me.rockyhawk.commandpanels.commandtags;
import jdk.nashorn.internal.ir.Block;
import me.realized.tokenmanager.api.TokenManager; import me.realized.tokenmanager.api.TokenManager;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.api.Panel;
@ -12,12 +13,16 @@ import me.rockyhawk.commandpanels.commandtags.tags.other.SpecialTags;
import me.rockyhawk.commandpanels.commandtags.tags.standard.BasicTags; import me.rockyhawk.commandpanels.commandtags.tags.standard.BasicTags;
import me.rockyhawk.commandpanels.commandtags.tags.standard.BungeeTags; import me.rockyhawk.commandpanels.commandtags.tags.standard.BungeeTags;
import me.rockyhawk.commandpanels.commandtags.tags.standard.ItemTags; import me.rockyhawk.commandpanels.commandtags.tags.standard.ItemTags;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects; import java.util.Objects;
public class CommandTags { public class CommandTags {
@ -26,11 +31,23 @@ public class CommandTags {
this.plugin = pl; this.plugin = pl;
} }
public void runCommand(Panel panel,Player p,String commandRAW){ public void runCommands(Panel panel, PanelPosition position,Player p, List<String> commands){
CommandTagEvent tags = new CommandTagEvent(plugin,panel,p,commandRAW); for (String command : commands) {
PaywallOutput val = plugin.commandTags.commandPayWall(panel,p,command);
if(val == PaywallOutput.Blocked){
break;
}
if(val == PaywallOutput.NotApplicable){
plugin.commandTags.runCommand(panel,position,p, command);
}
}
}
public void runCommand(Panel panel, PanelPosition position,Player p, String commandRAW){
CommandTagEvent tags = new CommandTagEvent(plugin,panel,position,p,commandRAW);
Bukkit.getPluginManager().callEvent(tags); Bukkit.getPluginManager().callEvent(tags);
if(!tags.commandTagUsed){ if(!tags.commandTagUsed){
Bukkit.dispatchCommand(p, plugin.tex.placeholders(panel,p,commandRAW.trim())); Bukkit.dispatchCommand(p, plugin.tex.placeholders(panel,position,p,commandRAW.trim()));
} }
} }
@ -50,7 +67,7 @@ public class CommandTags {
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public int commandPayWall(Player p, String command) { //return 0 means no funds, 1 is they passed and 2 means paywall is not this command public PaywallOutput commandPayWall(Panel panel, Player p, String command) { //return 0 means no funds, 1 is they passed and 2 means paywall is not this command
String tag = plugin.config.getString("config.format.tag") + " "; String tag = plugin.config.getString("config.format.tag") + " ";
switch(command.split("\\s")[0]){ switch(command.split("\\s")[0]){
case "paywall=": { case "paywall=": {
@ -60,19 +77,19 @@ public class CommandTags {
if (plugin.econ.getBalance(p) >= Double.parseDouble(command.split("\\s")[1])) { if (plugin.econ.getBalance(p) >= Double.parseDouble(command.split("\\s")[1])) {
plugin.econ.withdrawPlayer(p, Double.parseDouble(command.split("\\s")[1])); plugin.econ.withdrawPlayer(p, Double.parseDouble(command.split("\\s")[1]));
plugin.tex.sendString(p,Objects.requireNonNull(plugin.config.getString("purchase.currency.success")).replaceAll("%cp-args%", command.split("\\s")[1])); plugin.tex.sendString(p,Objects.requireNonNull(plugin.config.getString("purchase.currency.success")).replaceAll("%cp-args%", command.split("\\s")[1]));
return 1; return PaywallOutput.Passed;
} else { } else {
plugin.tex.sendString(p,plugin.config.getString("purchase.currency.failure")); plugin.tex.sendString(p,plugin.config.getString("purchase.currency.failure"));
return 0; return PaywallOutput.Blocked;
} }
} else { } else {
plugin.tex.sendString(p, tag + ChatColor.RED + "Paying Requires Vault and an Economy to work!"); plugin.tex.sendString(p, tag + ChatColor.RED + "Paying Requires Vault and an Economy to work!");
return 0; return PaywallOutput.Blocked;
} }
} catch (Exception buyc) { } catch (Exception buyc) {
plugin.debug(buyc,p); plugin.debug(buyc,p);
plugin.tex.sendString(p, tag + plugin.config.getString("config.format.error") + " " + "commands: " + command); plugin.tex.sendString(p, tag + plugin.config.getString("config.format.error") + " " + "commands: " + command);
return 0; return PaywallOutput.Blocked;
} }
} }
case "tokenpaywall=": { case "tokenpaywall=": {
@ -86,24 +103,25 @@ public class CommandTags {
api.removeTokens(p, Long.parseLong(command.split("\\s")[1])); api.removeTokens(p, Long.parseLong(command.split("\\s")[1]));
//if the message is empty don't send //if the message is empty don't send
plugin.tex.sendString(p,Objects.requireNonNull(plugin.config.getString("purchase.tokens.success")).replaceAll("%cp-args%", command.split("\\s")[1])); plugin.tex.sendString(p,Objects.requireNonNull(plugin.config.getString("purchase.tokens.success")).replaceAll("%cp-args%", command.split("\\s")[1]));
return 1; return PaywallOutput.Passed;
} else { } else {
plugin.tex.sendString(p,plugin.config.getString("purchase.tokens.failure")); plugin.tex.sendString(p,plugin.config.getString("purchase.tokens.failure"));
return 0; return PaywallOutput.Blocked;
} }
} else { } else {
plugin.tex.sendString(p, tag + ChatColor.RED + "Needs TokenManager to work!"); plugin.tex.sendString(p, tag + ChatColor.RED + "Needs TokenManager to work!");
return 0; return PaywallOutput.Blocked;
} }
} catch (Exception buyc) { } catch (Exception buyc) {
plugin.debug(buyc,p); plugin.debug(buyc,p);
plugin.tex.sendString(p, tag + plugin.config.getString("config.format.error") + " " + "commands: " + command); plugin.tex.sendString(p, tag + plugin.config.getString("config.format.error") + " " + "commands: " + command);
return 0; return PaywallOutput.Blocked;
} }
} }
case "item-paywall=": { case "item-paywall=": {
//if player uses item-paywall= [Material] [Amount] [Id] //if player uses item-paywall= [Material] [Amount] [Id]
//or player can use item-paywall= [custom-item] //player can use item-paywall= [custom-item]
List<ItemStack> cont = new ArrayList<>(Arrays.asList(plugin.inventorySaver.getNormalInventory(p)));
try { try {
short id = 0; short id = 0;
if(command.split("\\s").length == 4){ if(command.split("\\s").length == 4){
@ -113,41 +131,53 @@ public class CommandTags {
//create the item to be removed //create the item to be removed
ItemStack sellItem; ItemStack sellItem;
if(command.split("\\s").length == 2) { if(command.split("\\s").length == 2) {
sellItem = plugin.itemCreate.makeCustomItemFromConfig(null,plugin.openPanels.getOpenPanel(p.getName()).getConfig().getConfigurationSection("custom-item." + command.split("\\s")[1]), p, true, true, false); sellItem = plugin.itemCreate.makeCustomItemFromConfig(panel,PanelPosition.Top,panel.getConfig().getConfigurationSection("custom-item." + command.split("\\s")[1]), p, true, true, false);
}else{ }else{
sellItem = new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[1])), Integer.parseInt(command.split("\\s")[2]), id); sellItem = new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[1])), Integer.parseInt(command.split("\\s")[2]), id);
} }
//this is not a boolean because it needs to return an int //this is not a boolean because it needs to return an int
int removedItem = 0; PaywallOutput removedItem = PaywallOutput.Blocked;
//loop through items in the inventory //loop through items in the inventory
for(ItemStack content : p.getInventory().getContents()){ for(int f = 0; f < 36; f++){
if(content == null){ if(cont.get(f) == null){
//skip slot if empty //skip slot if empty
continue; continue;
} }
if(command.split("\\s").length == 2){ if(command.split("\\s").length == 2){
//if item paywall is custom item //if item paywall is custom item
if(plugin.itemCreate.isIdentical(sellItem,content)){ if(plugin.itemCreate.isIdentical(sellItem,cont.get(f))){
content.setAmount(content.getAmount() - sellItem.getAmount()); if (sellItem.getAmount() <= cont.get(f).getAmount()) {
if (plugin.inventorySaver.hasNormalInventory(p)) {
p.getInventory().getItem(f).setAmount(cont.get(f).getAmount() - sellItem.getAmount());
p.updateInventory(); p.updateInventory();
removedItem = 1; } else {
cont.get(f).setAmount(cont.get(f).getAmount() - sellItem.getAmount());
plugin.inventorySaver.inventoryConfig.set(p.getUniqueId().toString(), plugin.itemSerializer.itemStackArrayToBase64(cont.toArray(new ItemStack[0])));
}
removedItem = PaywallOutput.Passed;
break; break;
} }
}
//if custom item is an mmo item (1.14+ for the API) //if custom item is an mmo item (1.14+ for the API)
try { try {
if (plugin.getServer().getPluginManager().isPluginEnabled("MMOItems") && plugin.openPanels.getOpenPanel(p.getName()).getConfig().getString("custom-item." + command.split("\\s")[1] + ".material").startsWith("mmo=")) { if (plugin.getServer().getPluginManager().isPluginEnabled("MMOItems") && panel.getConfig().getString("custom-item." + command.split("\\s")[1] + ".material").startsWith("mmo=")) {
String customItemMaterial = plugin.openPanels.getOpenPanel(p.getName()).getConfig().getString("custom-item." + command.split("\\s")[1] + ".material"); String customItemMaterial = panel.getConfig().getString("custom-item." + command.split("\\s")[1] + ".material");
String mmoType = customItemMaterial.split("\\s")[1]; String mmoType = customItemMaterial.split("\\s")[1];
String mmoID = customItemMaterial.split("\\s")[2]; String mmoID = customItemMaterial.split("\\s")[2];
if (plugin.isMMOItem(content,mmoType,mmoID) && sellItem.getAmount() <= content.getAmount()) { if (plugin.isMMOItem(cont.get(f),mmoType,mmoID) && sellItem.getAmount() <= cont.get(f).getAmount()) {
content.setAmount(content.getAmount() - sellItem.getAmount()); if(plugin.inventorySaver.hasNormalInventory(p)){
p.getInventory().getItem(f).setAmount(cont.get(f).getAmount() - sellItem.getAmount());
p.updateInventory(); p.updateInventory();
removedItem = 1; }else{
cont.get(f).setAmount(cont.get(f).getAmount() - sellItem.getAmount());
plugin.inventorySaver.inventoryConfig.set(p.getUniqueId().toString(), plugin.itemSerializer.itemStackArrayToBase64(cont.toArray(new ItemStack[0])));
}
removedItem = PaywallOutput.Passed;
break; break;
} }
} }
@ -157,11 +187,16 @@ public class CommandTags {
}else { }else {
//if the item is a standard material //if the item is a standard material
if (content.getType() == sellItem.getType()) { if (cont.get(f).getType() == sellItem.getType()) {
if (sellItem.getAmount() <= content.getAmount()) { if (sellItem.getAmount() <= cont.get(f).getAmount()) {
content.setAmount(content.getAmount() - sellItem.getAmount()); if(plugin.inventorySaver.hasNormalInventory(p)){
p.getInventory().getItem(f).setAmount(cont.get(f).getAmount() - sellItem.getAmount());
p.updateInventory(); p.updateInventory();
removedItem = 1; }else{
cont.get(f).setAmount(cont.get(f).getAmount() - sellItem.getAmount());
plugin.inventorySaver.inventoryConfig.set(p.getUniqueId().toString(), plugin.itemSerializer.itemStackArrayToBase64(cont.toArray(new ItemStack[0])));
}
removedItem = PaywallOutput.Passed;
break; break;
} }
} }
@ -169,7 +204,7 @@ public class CommandTags {
} }
//send message and return //send message and return
if(removedItem == 0){ if(removedItem == PaywallOutput.Blocked){
plugin.tex.sendString(p, tag + plugin.config.getString("purchase.item.failure")); plugin.tex.sendString(p, tag + plugin.config.getString("purchase.item.failure"));
}else{ }else{
plugin.tex.sendString(p,Objects.requireNonNull(plugin.config.getString("purchase.item.success")).replaceAll("%cp-args%",sellItem.getType().toString())); plugin.tex.sendString(p,Objects.requireNonNull(plugin.config.getString("purchase.item.success")).replaceAll("%cp-args%",sellItem.getType().toString()));
@ -178,7 +213,7 @@ public class CommandTags {
} catch (Exception buyc) { } catch (Exception buyc) {
plugin.debug(buyc,p); plugin.debug(buyc,p);
plugin.tex.sendString(p, tag + plugin.config.getString("config.format.error") + " " + "commands: " + command); plugin.tex.sendString(p, tag + plugin.config.getString("config.format.error") + " " + "commands: " + command);
return 0; return PaywallOutput.Blocked;
} }
} }
case "xp-paywall=": { case "xp-paywall=": {
@ -189,18 +224,18 @@ public class CommandTags {
p.setLevel(p.getLevel() - Integer.parseInt(command.split("\\s")[1])); p.setLevel(p.getLevel() - Integer.parseInt(command.split("\\s")[1]));
//if the message is empty don't send //if the message is empty don't send
plugin.tex.sendString(p,Objects.requireNonNull(plugin.config.getString("purchase.xp.success")).replaceAll("%cp-args%", command.split("\\s")[1])); plugin.tex.sendString(p,Objects.requireNonNull(plugin.config.getString("purchase.xp.success")).replaceAll("%cp-args%", command.split("\\s")[1]));
return 1; return PaywallOutput.Passed;
} else { } else {
plugin.tex.sendString(p, plugin.config.getString("purchase.xp.failure")); plugin.tex.sendString(p, plugin.config.getString("purchase.xp.failure"));
return 0; return PaywallOutput.Blocked;
} }
} catch (Exception buyc) { } catch (Exception buyc) {
plugin.debug(buyc,p); plugin.debug(buyc,p);
plugin.tex.sendString(p, tag + plugin.config.getString("config.format.error") + " " + "commands: " + command); plugin.tex.sendString(p, tag + plugin.config.getString("config.format.error") + " " + "commands: " + command);
return 0; return PaywallOutput.Blocked;
} }
} }
} }
return 2; return PaywallOutput.NotApplicable;
} }
} }

View File

@ -0,0 +1,7 @@
package me.rockyhawk.commandpanels.commandtags;
public enum PaywallOutput {
Blocked,
Passed,
NotApplicable
}

View File

@ -29,7 +29,7 @@ public class BuyCommandTags implements Listener {
//execute command under here //execute command under here
String price = e.args[0]; String price = e.args[0];
String command = String.join(" ",Arrays.copyOfRange(e.raw, 1, e.raw.length)); String command = String.join(" ",Arrays.copyOfRange(e.raw, 1, e.raw.length));
plugin.commandTags.runCommand(e.panel,e.p,command); plugin.commandTags.runCommand(e.panel,e.pos,e.p,command);
plugin.tex.sendMessage(e.p,plugin.config.getString("purchase.currency.success").replaceAll("%cp-args%", price)); plugin.tex.sendMessage(e.p,plugin.config.getString("purchase.currency.success").replaceAll("%cp-args%", price));
} else { } else {
plugin.tex.sendMessage(e.p, plugin.config.getString("purchase.currency.failure")); plugin.tex.sendMessage(e.p, plugin.config.getString("purchase.currency.failure"));
@ -56,7 +56,7 @@ public class BuyCommandTags implements Listener {
//execute command under here //execute command under here
String price = e.args[0]; String price = e.args[0];
String command = String.join(" ",Arrays.copyOfRange(e.raw, 1, e.raw.length)); String command = String.join(" ",Arrays.copyOfRange(e.raw, 1, e.raw.length));
plugin.commandTags.runCommand(e.panel,e.p,command); plugin.commandTags.runCommand(e.panel,e.pos,e.p,command);
plugin.tex.sendMessage(e.p, Objects.requireNonNull(plugin.config.getString("purchase.tokens.success")).replaceAll("%cp-args%", price)); plugin.tex.sendMessage(e.p, Objects.requireNonNull(plugin.config.getString("purchase.tokens.success")).replaceAll("%cp-args%", price));
} else { } else {
plugin.tex.sendMessage(e.p, plugin.config.getString("purchase.tokens.failure")); plugin.tex.sendMessage(e.p, plugin.config.getString("purchase.tokens.failure"));

View File

@ -80,10 +80,6 @@ public class BuyItemTags implements Listener {
} }
} }
} }
if (p.getInventory().firstEmpty() >= 0) { plugin.inventorySaver.addItem(p,new ItemStack(Objects.requireNonNull(Material.matchMaterial(args[1])), Integer.parseInt(args[2]),id));
p.getInventory().addItem(new ItemStack(Objects.requireNonNull(Material.matchMaterial(args[1])), Integer.parseInt(args[2]),id));
} else {
Objects.requireNonNull(p.getLocation().getWorld()).dropItemNaturally(p.getLocation(), new ItemStack(Objects.requireNonNull(Material.matchMaterial(args[1])), Integer.parseInt(args[2]),id));
}
} }
} }

View File

@ -13,6 +13,9 @@ import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.inventory.meta.PotionMeta;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects; import java.util.Objects;
public class SellItemTags implements Listener { public class SellItemTags implements Listener {
@ -28,7 +31,7 @@ public class SellItemTags implements Listener {
//if player uses sell= it will be eg. sell= <cashback> <item> <amount of item> [enchanted:KNOCKBACK:1] [potion:JUMP] //if player uses sell= it will be eg. sell= <cashback> <item> <amount of item> [enchanted:KNOCKBACK:1] [potion:JUMP]
try { try {
if (plugin.econ != null) { if (plugin.econ != null) {
boolean sold = checkItem(e.p, e.args); boolean sold = removeItem(e.p, e.args);
if (!sold) { if (!sold) {
plugin.tex.sendMessage(e.p, plugin.config.getString("purchase.item.failure")); plugin.tex.sendMessage(e.p, plugin.config.getString("purchase.item.failure"));
} else { } else {
@ -50,7 +53,7 @@ public class SellItemTags implements Listener {
try { try {
if (plugin.getServer().getPluginManager().isPluginEnabled("TokenManager")) { if (plugin.getServer().getPluginManager().isPluginEnabled("TokenManager")) {
TokenManager api = (TokenManager) Bukkit.getServer().getPluginManager().getPlugin("TokenManager"); TokenManager api = (TokenManager) Bukkit.getServer().getPluginManager().getPlugin("TokenManager");
boolean sold = checkItem(e.p, e.args); boolean sold = removeItem(e.p, e.args);
if (!sold) { if (!sold) {
plugin.tex.sendMessage(e.p, plugin.config.getString("purchase.item.failure")); plugin.tex.sendMessage(e.p, plugin.config.getString("purchase.item.failure"));
} else { } else {
@ -68,10 +71,12 @@ public class SellItemTags implements Listener {
} }
} }
@SuppressWarnings("deprecation") //returns false if player does not have item
private boolean checkItem(Player p, String[] args){ private boolean removeItem(Player p, String[] args){
for (int f = 0; f < p.getInventory().getSize(); f++) { List<ItemStack> cont = new ArrayList<>(Arrays.asList(plugin.inventorySaver.getNormalInventory(p)));
ItemStack itm = p.getInventory().getItem(f);
for (int f = 0; f < 36; f++) {
ItemStack itm = cont.get(f);
if (itm != null && itm.getType().equals(Material.matchMaterial(args[1]))) { if (itm != null && itm.getType().equals(Material.matchMaterial(args[1]))) {
//determine if the command contains parameters for extensions //determine if the command contains parameters for extensions
String potion = "false"; String potion = "false";
@ -112,8 +117,13 @@ public class SellItemTags implements Listener {
if (itm.getAmount() >= new ItemStack(Objects.requireNonNull(Material.matchMaterial(args[1])), Integer.parseInt(args[2])).getAmount()) { if (itm.getAmount() >= new ItemStack(Objects.requireNonNull(Material.matchMaterial(args[1])), Integer.parseInt(args[2])).getAmount()) {
int amt = itm.getAmount() - new ItemStack(Objects.requireNonNull(Material.matchMaterial(args[1])), Integer.parseInt(args[2])).getAmount(); int amt = itm.getAmount() - new ItemStack(Objects.requireNonNull(Material.matchMaterial(args[1])), Integer.parseInt(args[2])).getAmount();
itm.setAmount(amt); itm.setAmount(amt);
if(plugin.inventorySaver.hasNormalInventory(p)){
p.getInventory().setItem(f, amt > 0 ? itm : null); p.getInventory().setItem(f, amt > 0 ? itm : null);
p.updateInventory(); p.updateInventory();
}else{
cont.set(f,amt > 0 ? itm : null);
plugin.inventorySaver.inventoryConfig.set(p.getUniqueId().toString(), plugin.itemSerializer.itemStackArrayToBase64(cont.toArray(new ItemStack[0])));
}
return true; return true;
} }
} }

View File

@ -19,31 +19,31 @@ public class DataTags implements Listener {
if(e.name.equalsIgnoreCase("set-data=")){ if(e.name.equalsIgnoreCase("set-data=")){
e.commandTagUsed(); e.commandTagUsed();
if(e.args.length == 3){ if(e.args.length == 3){
plugin.panelData.setUserData(getOffline(e.args[2]),e.args[0],plugin.tex.placeholdersNoColour(e.panel,e.p,e.args[1]),true); plugin.panelData.setUserData(getOffline(e.args[2]),e.args[0],plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[1]),true);
return; return;
} }
//this will overwrite data. set-data= [data point] [data value] [optional player] //this will overwrite data. set-data= [data point] [data value] [optional player]
plugin.panelData.setUserData(e.p.getUniqueId(),e.args[0],plugin.tex.placeholdersNoColour(e.panel,e.p,e.args[1]),true); plugin.panelData.setUserData(e.p.getUniqueId(),e.args[0],plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[1]),true);
return; return;
} }
if(e.name.equalsIgnoreCase("add-data=")){ if(e.name.equalsIgnoreCase("add-data=")){
e.commandTagUsed(); e.commandTagUsed();
if(e.args.length == 3){ if(e.args.length == 3){
plugin.panelData.setUserData(getOffline(e.args[2]),e.args[0],plugin.tex.placeholdersNoColour(e.panel,e.p,e.args[1]),false); plugin.panelData.setUserData(getOffline(e.args[2]),e.args[0],plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[1]),false);
return; return;
} }
//this will not overwrite existing data. add-data= [data point] [data value] [optional player] //this will not overwrite existing data. add-data= [data point] [data value] [optional player]
plugin.panelData.setUserData(e.p.getUniqueId(),e.args[0],plugin.tex.placeholdersNoColour(e.panel,e.p,e.args[1]),false); plugin.panelData.setUserData(e.p.getUniqueId(),e.args[0],plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[1]),false);
return; return;
} }
if(e.name.equalsIgnoreCase("math-data=")){ if(e.name.equalsIgnoreCase("math-data=")){
e.commandTagUsed(); e.commandTagUsed();
if(e.args.length == 3){ if(e.args.length == 3){
plugin.panelData.doDataMath(getOffline(e.args[2]),e.args[0],plugin.tex.placeholdersNoColour(e.panel,e.p,e.args[1])); plugin.panelData.doDataMath(getOffline(e.args[2]),e.args[0],plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[1]));
return; return;
} }
//only works if data is number, goes math-data= [data point] [operator:number] [optional player] eg, math-data= -1 OR /3 //only works if data is number, goes math-data= [data point] [operator:number] [optional player] eg, math-data= -1 OR /3
plugin.panelData.doDataMath(e.p.getUniqueId(),e.args[0],plugin.tex.placeholdersNoColour(e.panel,e.p,e.args[1])); plugin.panelData.doDataMath(e.p.getUniqueId(),e.args[0],plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[1]));
return; return;
} }
if(e.name.equalsIgnoreCase("clear-data=")){ if(e.name.equalsIgnoreCase("clear-data=")){

View File

@ -31,7 +31,7 @@ public class PlaceholderTags implements Listener {
//do not change the placeholder //do not change the placeholder
String placeholder = contents.substring(0,contents.indexOf(':')); String placeholder = contents.substring(0,contents.indexOf(':'));
//only convert placeholders for the value //only convert placeholders for the value
String value = plugin.tex.placeholders(e.panel,e.p,contents.substring(contents.indexOf(':')+1)); String value = plugin.tex.placeholders(e.panel,e.pos,e.p,contents.substring(contents.indexOf(':')+1));
e.panel.placeholders.addPlaceholder(placeholder,value); e.panel.placeholders.addPlaceholder(placeholder,value);
i = i+contents.length()-1; i = i+contents.length()-1;
} }
@ -57,7 +57,7 @@ public class PlaceholderTags implements Listener {
//only convert placeholders for the value //only convert placeholders for the value
if (!e.panel.placeholders.keys.containsKey(placeholder)) { if (!e.panel.placeholders.keys.containsKey(placeholder)) {
//only convert placeholders for the value //only convert placeholders for the value
String value = plugin.tex.placeholders(e.panel, e.p, contents.substring(contents.indexOf(':') + 1)); String value = plugin.tex.placeholders(e.panel,e.pos, e.p, contents.substring(contents.indexOf(':') + 1));
e.panel.placeholders.addPlaceholder(placeholder, value); e.panel.placeholders.addPlaceholder(placeholder, value);
} }
i = i + contents.length() - 1; i = i + contents.length() - 1;

View File

@ -3,6 +3,7 @@ package me.rockyhawk.commandpanels.commandtags.tags.other;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.api.Panel;
import me.rockyhawk.commandpanels.commandtags.CommandTagEvent; import me.rockyhawk.commandpanels.commandtags.CommandTagEvent;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.ArrayUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
@ -26,6 +27,7 @@ public class SpecialTags implements Listener {
String cmd = String.join(" ",e.args).replace(e.args[0],"").trim(); String cmd = String.join(" ",e.args).replace(e.args[0],"").trim();
Panel openPanel = null; Panel openPanel = null;
PanelPosition openPosition = e.pos;
for(Panel pane : plugin.panelList){ for(Panel pane : plugin.panelList){
if(pane.getName().equals(panelName)){ if(pane.getName().equals(panelName)){
openPanel = pane.copy(); openPanel = pane.copy();
@ -42,12 +44,30 @@ public class SpecialTags implements Listener {
//do not change the placeholder //do not change the placeholder
String placeholder = contents.substring(0,contents.indexOf(':')); String placeholder = contents.substring(0,contents.indexOf(':'));
//only convert placeholders for the value //only convert placeholders for the value
String value = plugin.tex.placeholders(e.panel,e.p,contents.substring(contents.indexOf(':')+1)); String value = plugin.tex.placeholders(e.panel,e.pos,e.p,contents.substring(contents.indexOf(':')+1));
openPanel.placeholders.addPlaceholder(placeholder,value); openPanel.placeholders.addPlaceholder(placeholder,value);
i = i+contents.length()-1; i = i+contents.length()-1;
}else if(cm[i].equals('{')){
String contents = cmd.substring(i+1, i+cmd.substring(i).indexOf('}'));
openPosition = PanelPosition.valueOf(contents);
i = i+contents.length()-1;
} }
} }
openPanel.open(e.p); openPanel.open(e.p,openPosition);
return;
}
if(e.name.equalsIgnoreCase("close=")) {
e.commandTagUsed();
//closes specific panel positions
PanelPosition position = PanelPosition.valueOf(e.args[0]);
if(position == PanelPosition.Middle && plugin.openPanels.hasPanelOpen(e.p.getName(),position)){
plugin.openPanels.closePanelForLoader(e.p.getName(),PanelPosition.Middle);
}else if(position == PanelPosition.Bottom && plugin.openPanels.hasPanelOpen(e.p.getName(),position)){
plugin.openPanels.closePanelForLoader(e.p.getName(),PanelPosition.Bottom);
}else if(position == PanelPosition.Top && plugin.openPanels.hasPanelOpen(e.p.getName(),position)){
//closing top closes all
e.p.closeInventory();
}
return; return;
} }
if(e.name.equalsIgnoreCase("teleport=")) { if(e.name.equalsIgnoreCase("teleport=")) {
@ -79,17 +99,18 @@ public class SpecialTags implements Listener {
plugin.tex.sendMessage(e.p,plugin.config.getString("config.format.notitem")); plugin.tex.sendMessage(e.p,plugin.config.getString("config.format.notitem"));
} }
} }
return;
} }
if(e.name.equalsIgnoreCase("delay=")) { if(e.name.equalsIgnoreCase("delay=")) {
e.commandTagUsed(); e.commandTagUsed();
//if player uses op= it will perform command as op //if player uses op= it will perform command as op
final int delaySeconds = Integer.parseInt(e.args[0]); final int delayTicks = Integer.parseInt(e.args[0]);
String finalCommand = String.join(" ",e.args).replace(e.args[0],"").trim(); String finalCommand = String.join(" ",e.args).replace(e.args[0],"").trim();
new BukkitRunnable() { new BukkitRunnable() {
@Override @Override
public void run() { public void run() {
try { try {
plugin.commandTags.runCommand(e.panel, e.p, finalCommand); plugin.commandTags.runCommand(e.panel,e.pos, e.p, finalCommand);
} catch (Exception ex) { } catch (Exception ex) {
//if there are any errors, cancel so that it doesn't loop errors //if there are any errors, cancel so that it doesn't loop errors
plugin.debug(ex, e.p); plugin.debug(ex, e.p);
@ -97,7 +118,7 @@ public class SpecialTags implements Listener {
} }
this.cancel(); this.cancel();
} }
}.runTaskTimer(plugin, 20L * delaySeconds, 20); //20 ticks == 1 second }.runTaskTimer(plugin, delayTicks, 1); //20 ticks == 1 second
} }
} }
} }

View File

@ -3,6 +3,7 @@ package me.rockyhawk.commandpanels.commandtags.tags.standard;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.PanelCommandEvent; import me.rockyhawk.commandpanels.api.PanelCommandEvent;
import me.rockyhawk.commandpanels.commandtags.CommandTagEvent; import me.rockyhawk.commandpanels.commandtags.CommandTagEvent;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelOpenType;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -24,7 +25,7 @@ public class BasicTags implements Listener {
} }
if(e.name.equalsIgnoreCase("refresh")) { if(e.name.equalsIgnoreCase("refresh")) {
e.commandTagUsed(); e.commandTagUsed();
plugin.createGUI.openGui(plugin.openPanels.getOpenPanel(e.p.getName()), e.p, 0, 0); plugin.createGUI.openGui(e.panel, e.p, e.pos, PanelOpenType.Refresh, 0);
return; return;
} }
if(e.name.equalsIgnoreCase("console=")) { if(e.name.equalsIgnoreCase("console=")) {

View File

@ -2,7 +2,7 @@ package me.rockyhawk.commandpanels.commandtags.tags.standard;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.commandtags.CommandTagEvent; import me.rockyhawk.commandpanels.commandtags.CommandTagEvent;
import org.bukkit.configuration.ConfigurationSection; import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -17,17 +17,23 @@ public class ItemTags implements Listener {
public void commandTag(CommandTagEvent e){ public void commandTag(CommandTagEvent e){
if(e.name.equalsIgnoreCase("give-item=")){ if(e.name.equalsIgnoreCase("give-item=")){
e.commandTagUsed(); e.commandTagUsed();
ItemStack itm = plugin.itemCreate.makeCustomItemFromConfig(null,plugin.openPanels.getOpenPanel(e.p.getName()).getConfig().getConfigurationSection("custom-item." + e.args[0]), e.p, true, true, false); ItemStack itm = plugin.itemCreate.makeCustomItemFromConfig(null,e.pos,e.panel.getConfig().getConfigurationSection("custom-item." + e.args[0]), e.p, true, true, false);
e.p.getInventory().addItem(itm); plugin.inventorySaver.addItem(e.p,itm);
return; return;
} }
if(e.name.equalsIgnoreCase("setitem=")){ if(e.name.equalsIgnoreCase("setitem=")){
e.commandTagUsed(); e.commandTagUsed();
//if player uses setitem= [custom item] [slot] it will change the item slot to something, used for placeable items //if player uses setitem= [custom item] [slot] [position] it will change the item slot to something, used for placeable items
//make a section in the panel called "custom-item" then whatever the title of the item is, put that here //make a section in the panel called "custom-item" then whatever the title of the item is, put that here
ConfigurationSection panelCF = plugin.openPanels.getOpenPanel(e.p.getName()).getConfig(); ItemStack s = plugin.itemCreate.makeItemFromConfig(null, e.pos,e.panel.getConfig().getConfigurationSection("custom-item." + e.args[0]), e.p, true, true, true);
ItemStack s = plugin.itemCreate.makeItemFromConfig(null,panelCF.getConfigurationSection("custom-item." + e.args[0]), e.p, true, true, true); PanelPosition position = PanelPosition.valueOf(e.args[2]);
if(position == PanelPosition.Top) {
e.p.getOpenInventory().getTopInventory().setItem(Integer.parseInt(e.args[1]), s); e.p.getOpenInventory().getTopInventory().setItem(Integer.parseInt(e.args[1]), s);
}else if(position == PanelPosition.Middle) {
e.p.getInventory().setItem(Integer.parseInt(e.args[1])+9, s);
}else{
e.p.getInventory().setItem(Integer.parseInt(e.args[1]), s);
}
} }
} }
} }

View File

@ -2,6 +2,7 @@ package me.rockyhawk.commandpanels.customcommands;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.api.Panel;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent;
@ -23,7 +24,7 @@ public class Commandpanelcustom implements Listener {
for(String cmd : panelCommands){ for(String cmd : panelCommands){
if(cmd.equalsIgnoreCase(e.getMessage().replace("/", ""))){ if(cmd.equalsIgnoreCase(e.getMessage().replace("/", ""))){
e.setCancelled(true); e.setCancelled(true);
panel.open(e.getPlayer()); panel.open(e.getPlayer(), PanelPosition.Top);
return; return;
} }
@ -51,7 +52,7 @@ public class Commandpanelcustom implements Listener {
for(String[] placeholder : placeholders){ for(String[] placeholder : placeholders){
openPanel.placeholders.addPlaceholder(placeholder[0],placeholder[1]); openPanel.placeholders.addPlaceholder(placeholder[0],placeholder[1]);
} }
openPanel.open(e.getPlayer()); openPanel.open(e.getPlayer(),PanelPosition.Top);
return; return;
} }
} }

View File

@ -2,6 +2,8 @@ package me.rockyhawk.commandpanels.ingameeditor;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.api.Panel;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelOpenType;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
@ -39,7 +41,7 @@ public class CpIngameEditCommand implements CommandExecutor {
for(Panel panel : plugin.panelList){ for(Panel panel : plugin.panelList){
if(panel.getName().equals(args[0])) { if(panel.getName().equals(args[0])) {
//below will start the command, once it got the right file and panel //below will start the command, once it got the right file and panel
plugin.createGUI.openGui(panel.copy(), p,3,0); plugin.createGUI.openGui(panel.copy(), p, PanelPosition.Top, PanelOpenType.Editor,0);
return true; return true;
} }
} }

View File

@ -2,6 +2,8 @@ package me.rockyhawk.commandpanels.ingameeditor;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.api.Panel;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelOpenType;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound; import org.bukkit.Sound;
@ -78,7 +80,7 @@ public class EditorUserInput implements Listener {
final ConfigurationSection finalCF = cf; final ConfigurationSection finalCF = cf;
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
public void run() { public void run() {
plugin.createGUI.openGui(new Panel(finalCF, panelName), p, 3,0); //I have to do this to run regular Bukkit voids in an ASYNC Event plugin.createGUI.openGui(new Panel(finalCF, panelName), p, PanelPosition.Top, PanelOpenType.Editor,0); //I have to do this to run regular Bukkit voids in an ASYNC Event
} }
}); });
}else if(section.startsWith("section.")){ }else if(section.startsWith("section.")){

View File

@ -2,6 +2,8 @@ package me.rockyhawk.commandpanels.ingameeditor;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.api.Panel;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelOpenType;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
@ -35,7 +37,7 @@ public class EditorUtils implements Listener {
return; return;
} }
}catch(NullPointerException nu){return;} }catch(NullPointerException nu){return;}
if(!p.getOpenInventory().getTitle().equals(ChatColor.stripColor(plugin.tex.colour("Command Panels Editor"))) || plugin.openPanels.hasPanelOpen(p.getName())){ if(!p.getOpenInventory().getTitle().equals(ChatColor.stripColor(plugin.tex.colour("Command Panels Editor"))) || plugin.openPanels.hasPanelOpen(p.getName(), PanelPosition.Top)){
return; return;
} }
if(e.getClickedInventory() != e.getView().getTopInventory()){ if(e.getClickedInventory() != e.getView().getTopInventory()){
@ -98,7 +100,7 @@ public class EditorUtils implements Listener {
int count = 0; int count = 0;
for(String panelName : panelNames){ for(String panelName : panelNames){
if(panelName.equals(ChatColor.stripColor(Objects.requireNonNull(e.getCurrentItem().getItemMeta()).getDisplayName()))){ if(panelName.equals(ChatColor.stripColor(Objects.requireNonNull(e.getCurrentItem().getItemMeta()).getDisplayName()))){
plugin.createGUI.openGui(new Panel(panelYaml.get(count), panelName), p,3,0); plugin.createGUI.openGui(new Panel(panelYaml.get(count), panelName), p,PanelPosition.Top,PanelOpenType.Editor,0);
return; return;
} }
count +=1; count +=1;
@ -123,7 +125,7 @@ public class EditorUtils implements Listener {
@EventHandler @EventHandler
public void onInventoryDrag(InventoryDragEvent e) { public void onInventoryDrag(InventoryDragEvent e) {
Player p = (Player)e.getWhoClicked(); Player p = (Player)e.getWhoClicked();
if(!p.getOpenInventory().getTitle().contains("Editing Panel:") || plugin.openPanels.hasPanelOpen(p.getName())){ if(!p.getOpenInventory().getTitle().contains("Editing Panel:") || plugin.openPanels.hasPanelOpen(p.getName(),PanelPosition.Top)){
return; return;
} }
String panelName = ""; //all panels from ALL files (panel names) String panelName = ""; //all panels from ALL files (panel names)
@ -180,7 +182,7 @@ public class EditorUtils implements Listener {
@EventHandler @EventHandler
public void onInventoryEdit(InventoryClickEvent e) { public void onInventoryEdit(InventoryClickEvent e) {
Player p = (Player)e.getWhoClicked(); Player p = (Player)e.getWhoClicked();
if(!p.getOpenInventory().getTitle().contains("Editing Panel:") || plugin.openPanels.hasPanelOpen(p.getName())){ if(!p.getOpenInventory().getTitle().contains("Editing Panel:") || plugin.openPanels.hasPanelOpen(p.getName(),PanelPosition.Top)){
return; return;
} }
String panelName = ""; String panelName = "";
@ -293,8 +295,8 @@ public class EditorUtils implements Listener {
@EventHandler @EventHandler
public void onPlayerClosePanel(InventoryCloseEvent e){ public void onPlayerClosePanel(InventoryCloseEvent e){
//this is put here to avoid conflicts, close panel if it is open //this is put here to avoid conflicts, close panel if it is open
if(plugin.openPanels.hasPanelOpen(e.getPlayer().getName())){ if(plugin.openPanels.hasPanelOpen(e.getPlayer().getName(),PanelPosition.Top)){
plugin.openPanels.closePanelForLoader(e.getPlayer().getName()); plugin.openPanels.closePanelForLoader(e.getPlayer().getName(),PanelPosition.Top);
return; return;
} }
//do editor settings if it is not a regular panel //do editor settings if it is not a regular panel
@ -308,7 +310,7 @@ public class EditorUtils implements Listener {
@EventHandler @EventHandler
public void onPanelSettings(InventoryClickEvent e) { public void onPanelSettings(InventoryClickEvent e) {
Player p = (Player)e.getWhoClicked(); Player p = (Player)e.getWhoClicked();
if(!p.getOpenInventory().getTitle().contains("Panel Settings:") || plugin.openPanels.hasPanelOpen(p.getName())){ if(!p.getOpenInventory().getTitle().contains("Panel Settings:") || plugin.openPanels.hasPanelOpen(p.getName(),PanelPosition.Top)){
return; return;
} }
e.setCancelled(true); e.setCancelled(true);
@ -459,7 +461,7 @@ public class EditorUtils implements Listener {
@EventHandler @EventHandler
public void onItemSettings(InventoryClickEvent e) { public void onItemSettings(InventoryClickEvent e) {
Player p = (Player)e.getWhoClicked(); Player p = (Player)e.getWhoClicked();
if(!p.getOpenInventory().getTitle().contains("Item Settings:") || plugin.openPanels.hasPanelOpen(p.getName())){ if(!p.getOpenInventory().getTitle().contains("Item Settings:") || plugin.openPanels.hasPanelOpen(p.getName(),PanelPosition.Top)){
return; return;
} }
e.setCancelled(true); e.setCancelled(true);
@ -570,7 +572,7 @@ public class EditorUtils implements Listener {
String newSection = itemSlot.substring(0, itemSlot.lastIndexOf(".")); String newSection = itemSlot.substring(0, itemSlot.lastIndexOf("."));
plugin.editorGuis.openItemSections(p,panelName,panelYaml.getConfigurationSection("item." + newSection), newSection); plugin.editorGuis.openItemSections(p,panelName,panelYaml.getConfigurationSection("item." + newSection), newSection);
}else { }else {
plugin.createGUI.openGui(new Panel(panelYaml, panelName), p, 3, 0); plugin.createGUI.openGui(new Panel(panelYaml, panelName), p,PanelPosition.Top, PanelOpenType.Editor, 0);
} }
p.updateInventory(); p.updateInventory();
} }
@ -580,7 +582,7 @@ public class EditorUtils implements Listener {
@EventHandler @EventHandler
public void onItemSection(InventoryClickEvent e) { public void onItemSection(InventoryClickEvent e) {
Player p = (Player)e.getWhoClicked(); Player p = (Player)e.getWhoClicked();
if(!p.getOpenInventory().getTitle().contains("Item Sections:") || plugin.openPanels.hasPanelOpen(p.getName())){ if(!p.getOpenInventory().getTitle().contains("Item Sections:") || plugin.openPanels.hasPanelOpen(p.getName(),PanelPosition.Top)){
return; return;
} }
e.setCancelled(true); e.setCancelled(true);

View File

@ -3,6 +3,7 @@ package me.rockyhawk.commandpanels.ingameeditor;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.api.Panel;
import me.rockyhawk.commandpanels.ioclasses.legacy.MinecraftVersions; import me.rockyhawk.commandpanels.ioclasses.legacy.MinecraftVersions;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
@ -260,7 +261,7 @@ public class OpenEditorGuis {
if(cf.contains("open-with-item.material")){ if(cf.contains("open-with-item.material")){
hotbarItems = true; hotbarItems = true;
temp = plugin.itemCreate.makeItemFromConfig(null,cf.getConfigurationSection("open-with-item"), p, false, true, false); temp = plugin.itemCreate.makeItemFromConfig(null, PanelPosition.Top,cf.getConfigurationSection("open-with-item"), p, false, true, false);
}else{ }else{
temp = new ItemStack(Material.REDSTONE_BLOCK, 1); temp = new ItemStack(Material.REDSTONE_BLOCK, 1);
} }
@ -497,7 +498,7 @@ public class OpenEditorGuis {
plugin.setName(null,temp, ChatColor.RED + "Back", null, p, true, true, true); plugin.setName(null,temp, ChatColor.RED + "Back", null, p, true, true, true);
i.setItem(27, temp); i.setItem(27, temp);
temp = plugin.itemCreate.makeItemFromConfig(null,cf,p,false,false, false); temp = plugin.itemCreate.makeItemFromConfig(null,PanelPosition.Top,cf,p,false,false, false);
lore.clear(); lore.clear();
lore.add(ChatColor.GRAY + "Click to set custom material"); lore.add(ChatColor.GRAY + "Click to set custom material");
lore.add(ChatColor.GRAY + "typically for custom heads"); lore.add(ChatColor.GRAY + "typically for custom heads");
@ -536,7 +537,7 @@ public class OpenEditorGuis {
lore.add(ChatColor.WHITE + "Compare: " + ChatColor.GRAY + cf.getString(section + ".compare")); lore.add(ChatColor.WHITE + "Compare: " + ChatColor.GRAY + cf.getString(section + ".compare"));
} }
temp = plugin.itemCreate.makeItemFromConfig(null,cf.getConfigurationSection(section),p,false,false, false); temp = plugin.itemCreate.makeItemFromConfig(null,PanelPosition.Top,cf.getConfigurationSection(section),p,false,false, false);
plugin.setName(null,temp, ChatColor.AQUA + section, lore, p,false, true, true); plugin.setName(null,temp, ChatColor.AQUA + section, lore, p,false, true, true);
i.setItem(slot, temp); i.setItem(slot, temp);
slot++; slot++;

View File

@ -2,6 +2,7 @@ package me.rockyhawk.commandpanels.interactives;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.commandtags.CommandTags; import me.rockyhawk.commandpanels.commandtags.CommandTags;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.AsyncPlayerChatEvent;
@ -35,7 +36,7 @@ public class CommandpanelUserInput implements Listener {
e.setCancelled(true); e.setCancelled(true);
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
public void run() { public void run() {
new CommandTags(plugin).runCommand(null,e.getPlayer(), command); //I have to do this to run regular Bukkit voids in an ASYNC Event new CommandTags(plugin).runCommand(null, PanelPosition.Top,e.getPlayer(), command); //I have to do this to run regular Bukkit voids in an ASYNC Event
} }
}); });
} }

View File

@ -3,6 +3,7 @@ package me.rockyhawk.commandpanels.interactives;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.api.Panel;
import me.rockyhawk.commandpanels.api.PanelOpenedEvent; import me.rockyhawk.commandpanels.api.PanelOpenedEvent;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelOpenType;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
@ -27,7 +28,6 @@ public class Commandpanelrefresher implements Listener {
} }
} }
//I have to convert HumanEntity to a player
Player p = e.getPlayer(); Player p = e.getPlayer();
Panel pn = e.getPanel(); Panel pn = e.getPanel();
@ -68,7 +68,7 @@ public class Commandpanelrefresher implements Listener {
c=0; c=0;
} }
//refresh here //refresh here
if(plugin.openPanels.hasPanelOpen(p.getName(),pn.getName())){ if(e.getPanel().isOpen){
if(p.getOpenInventory().getTopInventory().getHolder() != p){ if(p.getOpenInventory().getTopInventory().getHolder() != p){
//if open inventory is not a panel (owned by the player holder), cancel //if open inventory is not a panel (owned by the player holder), cancel
this.cancel(); this.cancel();
@ -89,11 +89,11 @@ public class Commandpanelrefresher implements Listener {
//reload the panel is debug is enabled (only personal debug) //reload the panel is debug is enabled (only personal debug)
pn.setConfig(YamlConfiguration.loadConfiguration(pn.getFile())); pn.setConfig(YamlConfiguration.loadConfiguration(pn.getFile()));
} }
plugin.createGUI.openGui(pn, p, 0,animatecount); plugin.createGUI.openGui(pn, p,e.getPosition(), PanelOpenType.Refresh,animatecount);
} catch (Exception e) { } catch (Exception ex) {
//error opening gui //error opening gui
p.closeInventory(); p.closeInventory();
plugin.openPanels.closePanelForLoader(p.getName()); plugin.openPanels.closePanelForLoader(p.getName(),e.getPosition());
this.cancel(); this.cancel();
} }
} }
@ -109,8 +109,9 @@ public class Commandpanelrefresher implements Listener {
this.cancel(); this.cancel();
//remove duplicate items here //remove duplicate items here
p.updateInventory(); p.updateInventory();
for(ItemStack itm : p.getInventory().getContents()){ if(plugin.inventorySaver.hasNormalInventory(p)) {
if(itm != null){ for (ItemStack itm : p.getInventory().getContents()) {
if (itm != null) {
if (plugin.nbt.hasNBT(itm)) { if (plugin.nbt.hasNBT(itm)) {
p.getInventory().remove(itm); p.getInventory().remove(itm);
} }
@ -118,6 +119,7 @@ public class Commandpanelrefresher implements Listener {
} }
} }
} }
}
}.runTaskTimer(this.plugin, 1,1); //20 ticks == 1 second (5 ticks = 0.25 of a second) }.runTaskTimer(this.plugin, 1,1); //20 ticks == 1 second (5 ticks = 0.25 of a second)
} }
} }

View File

@ -1,6 +1,7 @@
package me.rockyhawk.commandpanels.interactives; package me.rockyhawk.commandpanels.interactives;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -27,7 +28,7 @@ public class OpenOnJoin implements Listener {
private void openOnJoin(Player p, String joinType){ private void openOnJoin(Player p, String joinType){
if(plugin.config.contains(joinType + p.getWorld().getName())){ if(plugin.config.contains(joinType + p.getWorld().getName())){
String command = "open= " + plugin.config.getString(joinType + p.getWorld().getName()); String command = "open= " + plugin.config.getString(joinType + p.getWorld().getName());
plugin.commandTags.runCommand(null,p, command); plugin.commandTags.runCommand(null, PanelPosition.Top,p, command);
} }
} }
} }

View File

@ -37,7 +37,6 @@ public class NBT_1_14 {
ItemMeta itemMeta = item.getItemMeta(); ItemMeta itemMeta = item.getItemMeta();
return itemMeta.getPersistentDataContainer().get(ns_key, PersistentDataType.STRING); return itemMeta.getPersistentDataContainer().get(ns_key, PersistentDataType.STRING);
}catch (Exception e){ }catch (Exception e){
plugin.debug(e,null);
return ""; return "";
} }
} }

View File

@ -11,6 +11,7 @@ import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import java.util.HashSet;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
@ -21,31 +22,36 @@ public class OpenGUI {
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public Inventory openGui(Panel panel, Player p, int onOpen, int animateValue) { public Inventory openGui(Panel panel, Player p, PanelPosition position, PanelOpenType openType, int animateValue) {
ConfigurationSection pconfig = panel.getConfig(); ConfigurationSection pconfig = panel.getConfig();
Inventory i;
if(position == PanelPosition.Top) {
String title; String title;
if (onOpen != 3) { if (openType != PanelOpenType.Editor) {
//regular inventory //regular inventory
title = plugin.tex.placeholders(panel,p,pconfig.getString("title")); title = plugin.tex.placeholders(panel, position, p, pconfig.getString("title"));
} else { } else {
//editor inventory //editor inventory
title = "Editing Panel: " + panel.getName(); title = "Editing Panel: " + panel.getName();
} }
Inventory i; if (isNumeric(pconfig.getString("rows"))) {
if(isNumeric(pconfig.getString("rows"))){
i = Bukkit.createInventory(p, pconfig.getInt("rows") * 9, title); i = Bukkit.createInventory(p, pconfig.getInt("rows") * 9, title);
}else{ } else {
i = Bukkit.createInventory(p, InventoryType.valueOf(pconfig.getString("rows")), title); i = Bukkit.createInventory(p, InventoryType.valueOf(pconfig.getString("rows")), title);
} }
}else{
i = p.getInventory();
}
Set<String> itemList = pconfig.getConfigurationSection("item").getKeys(false); Set<String> itemList = pconfig.getConfigurationSection("item").getKeys(false);
HashSet<Integer> takenSlots = new HashSet<>();
for (String item : itemList) { for (String item : itemList) {
String section = ""; String section = "";
//onOpen needs to not be 3 so the editor won't include hasperm and hasvalue, etc items //openType needs to not be 3 so the editor won't include hasperm and hasvalue, etc items
if (onOpen != 3) { if (openType != PanelOpenType.Editor) {
section = plugin.itemCreate.hasSection(panel,pconfig.getConfigurationSection("item." + Integer.parseInt(item)), p); section = plugin.itemCreate.hasSection(panel,position,pconfig.getConfigurationSection("item." + Integer.parseInt(item)), p);
//This section is for animations below here: VISUAL ONLY //This section is for animations below here: VISUAL ONLY
//check for if there is animations inside the items section //check for if there is animations inside the items section
@ -58,23 +64,26 @@ public class OpenGUI {
} }
//will only add NBT if not an editor GUI //will only add NBT if not an editor GUI
ItemStack s = plugin.itemCreate.makeItemFromConfig(panel,Objects.requireNonNull(pconfig.getConfigurationSection("item." + item + section)), p, onOpen != 3, onOpen != 3, onOpen != 3); ItemStack s = plugin.itemCreate.makeItemFromConfig(panel,position,Objects.requireNonNull(pconfig.getConfigurationSection("item." + item + section)), p, openType != PanelOpenType.Editor, openType != PanelOpenType.Editor, openType != PanelOpenType.Editor);
//This is for CUSTOM ITEMS //This is for CUSTOM ITEMS
if(pconfig.contains("item." + item + section + ".itemType")) { if(pconfig.contains("item." + item + section + ".itemType")) {
//this is for contents in the itemType section //this is for contents in the itemType section
if (pconfig.getStringList("item." + item + section + ".itemType").contains("placeable") && onOpen == 0) { if (pconfig.getStringList("item." + item + section + ".itemType").contains("placeable") && openType == PanelOpenType.Refresh) {
//keep item the same, onOpen == 0 meaning panel is refreshing //keep item the same, openType == 0 meaning panel is refreshing
i.setItem(Integer.parseInt(item), p.getOpenInventory().getItem(Integer.parseInt(item))); setItem(p.getOpenInventory().getItem(Integer.parseInt(item)),Integer.parseInt(item),i,p,position);
takenSlots.add(Integer.parseInt(item));
continue; continue;
} }
} }
try { try {
//place item into the GUI //place item into the GUI
i.setItem(Integer.parseInt(item), s); setItem(s,Integer.parseInt(item),i,p,position);
takenSlots.add(Integer.parseInt(item));
//i.setItem(Integer.parseInt(item), s);
//only place duplicate items in without the editor mode. These are merely visual and will not carry over commands //only place duplicate items in without the editor mode. These are merely visual and will not carry over commands
if(pconfig.contains("item." + item + section + ".duplicate") && onOpen != 3) { if(pconfig.contains("item." + item + section + ".duplicate") && openType != PanelOpenType.Editor) {
try { try {
String[] duplicateItems = pconfig.getString("item." + item + section + ".duplicate").split(","); String[] duplicateItems = pconfig.getString("item." + item + section + ".duplicate").split(",");
for (String tempDupe : duplicateItems) { for (String tempDupe : duplicateItems) {
@ -84,47 +93,36 @@ public class OpenGUI {
for(int n = bothNumbers[0]; n <= bothNumbers[1]; n++){ for(int n = bothNumbers[0]; n <= bothNumbers[1]; n++){
try{ try{
if(!pconfig.contains("item." + n)){ if(!pconfig.contains("item." + n)){
i.setItem(n, s); setItem(s,n,i,p,position);
takenSlots.add(Integer.parseInt(item));
} }
}catch(NullPointerException ignore){ }catch(NullPointerException ignore){
i.setItem(n, s); setItem(s,n,i,p,position);
takenSlots.add(Integer.parseInt(item));
} }
} }
} else { } else {
//if there is only one dupe item //if there is only one dupe item
try{ try{
if(!pconfig.contains("item." + Integer.parseInt(tempDupe))){ if(!pconfig.contains("item." + Integer.parseInt(tempDupe))){
i.setItem(Integer.parseInt(tempDupe), s); setItem(s,Integer.parseInt(tempDupe),i,p,position);
takenSlots.add(Integer.parseInt(item));
} }
}catch(NullPointerException ignore){ }catch(NullPointerException ignore){
i.setItem(Integer.parseInt(tempDupe), s); setItem(s,Integer.parseInt(tempDupe),i,p,position);
takenSlots.add(Integer.parseInt(item));
} }
} }
} }
}catch(NullPointerException nullp){ }catch(NullPointerException nullp){
plugin.debug(nullp,p); plugin.debug(nullp,p);
p.closeInventory(); p.closeInventory();
plugin.openPanels.closePanelForLoader(p.getName()); plugin.openPanels.closePanelForLoader(p.getName(),position);
}
}
} catch (ArrayIndexOutOfBoundsException var24) {
plugin.debug(var24,p);
if (plugin.debug.isEnabled(p)) {
p.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.error") + " item: One of the items does not fit in the Panel!"));
p.closeInventory();
plugin.openPanels.closePanelForLoader(p.getName());
} }
} }
} catch (ArrayIndexOutOfBoundsException ignore) {}
} }
if (pconfig.contains("empty") && !Objects.equals(pconfig.getString("empty"), "AIR")) { if (pconfig.contains("empty") && !Objects.equals(pconfig.getString("empty"), "AIR")) {
for (int c = 0; i.getSize() > c; ++c) {
boolean found = false;
if(itemList.contains(String.valueOf(c))){
if(i.getItem(c) == null){
found = true;
}
}
if (!found) {
ItemStack empty; ItemStack empty;
try { try {
//emptyID for older versions of minecraft (might be deprecated later on) //emptyID for older versions of minecraft (might be deprecated later on)
@ -134,7 +132,7 @@ public class OpenGUI {
} }
//either use custom item or just material type //either use custom item or just material type
if(pconfig.contains("custom-item." + pconfig.getString("empty"))){ if(pconfig.contains("custom-item." + pconfig.getString("empty"))){
empty = plugin.itemCreate.makeItemFromConfig(panel,pconfig.getConfigurationSection("custom-item." + pconfig.getString("empty")),p,true,true,true); empty = plugin.itemCreate.makeItemFromConfig(panel,position,pconfig.getConfigurationSection("custom-item." + pconfig.getString("empty")),p,true,true,true);
}else{ }else{
empty = new ItemStack(Objects.requireNonNull(Material.matchMaterial(pconfig.getString("empty").toUpperCase())), 1,id); empty = new ItemStack(Objects.requireNonNull(Material.matchMaterial(pconfig.getString("empty").toUpperCase())), 1,id);
empty = plugin.nbt.setNBT(empty); empty = plugin.nbt.setNBT(empty);
@ -143,44 +141,71 @@ public class OpenGUI {
renamedMeta.setDisplayName(" "); renamedMeta.setDisplayName(" ");
empty.setItemMeta(renamedMeta); empty.setItemMeta(renamedMeta);
} }
if (empty.getType() == Material.AIR) { if (empty.getType() != Material.AIR) {
continue; for (int c = 0; getInvSize(i,position) > c; ++c) {
if (!takenSlots.contains(c)) {
//only place empty items if not editing
if(openType != PanelOpenType.Editor) {
setItem(empty,c,i,p,position);
}
}
}
} }
} catch (IllegalArgumentException | NullPointerException var26) { } catch (IllegalArgumentException | NullPointerException var26) {
plugin.debug(var26,p); plugin.debug(var26,p);
p.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.error") + " empty: " + pconfig.getString("empty")));
p.closeInventory();
plugin.openPanels.closePanelForLoader(p.getName());
return null;
}
if (onOpen != 3) {
//only place empty items if not editing
if(i.getItem(c) == null && !pconfig.contains("item." + c)) {
i.setItem(c, empty);
} }
} }
if (openType == PanelOpenType.Normal) {
//declare old panel closed
if(plugin.openPanels.hasPanelOpen(p.getName(),position)){
plugin.openPanels.getOpenPanel(p.getName(),position).isOpen = false;
} }
} //open new panel
}
if (onOpen == 1) {
//onOpen 1 is default
plugin.openPanels.skipPanelClose.add(p.getName()); plugin.openPanels.skipPanelClose.add(p.getName());
plugin.openPanels.openPanelForLoader(p.getName(),panel); plugin.openPanels.openPanelForLoader(p.getName(),panel,position);
//only if it needs to open the top inventory
if(position == PanelPosition.Top) {
p.openInventory(i); p.openInventory(i);
}
plugin.openPanels.skipPanelClose.remove(p.getName()); plugin.openPanels.skipPanelClose.remove(p.getName());
} else if (onOpen == 3) { } else if (openType == PanelOpenType.Editor) {
//onOpen 3 will open the editor panel //The editor will always be at panel position top
p.openInventory(i); p.openInventory(i);
} else if (onOpen == 0) { } else if (openType == PanelOpenType.Refresh) {
//onOpen 0 will just refresh the panel //openType 0 will just refresh the panel
plugin.legacy.setStorageContents(p,plugin.legacy.getStorageContents(i)); if(position == PanelPosition.Top) {
} else if (onOpen == 2) { plugin.legacy.setStorageContents(p, plugin.legacy.getStorageContents(i));
}
} else if (openType == PanelOpenType.Return) {
//will return the inventory, not opening it at all //will return the inventory, not opening it at all
return i; return i;
} }
return i; return i;
} }
private int getInvSize(Inventory inv, PanelPosition position){
if(position == PanelPosition.Top){
return inv.getSize();
}else if(position == PanelPosition.Middle){
return 27;
}else{
return 9;
}
}
private void setItem(ItemStack item, int slot, Inventory inv, Player p, PanelPosition position) throws ArrayIndexOutOfBoundsException{
if(position == PanelPosition.Top){
inv.setItem(slot, item);
}else if(position == PanelPosition.Middle){
if(slot+9 < 36) {
p.getInventory().setItem(slot + 9, item);
}
}else{
if(slot < 9) {
p.getInventory().setItem(slot, item);
}
}
}
private boolean isNumeric(String strNum) { private boolean isNumeric(String strNum) {
if (strNum == null) { if (strNum == null) {
return false; return false;

View File

@ -3,7 +3,7 @@ package me.rockyhawk.commandpanels.openpanelsmanager;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.api.Panel;
import me.rockyhawk.commandpanels.api.PanelClosedEvent; import me.rockyhawk.commandpanels.api.PanelClosedEvent;
import me.rockyhawk.commandpanels.ioclasses.nbt.NBT_1_13; import me.rockyhawk.commandpanels.api.PanelsInterface;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -20,92 +20,102 @@ public class OpenPanelsLoader {
The configuration section is opened directly The configuration section is opened directly
into the correct panel, so there is no need for the panel name into the correct panel, so there is no need for the panel name
*/ */
public HashMap<String, Panel> openPanels = new HashMap<>(); //player name and panel public HashMap<String, PanelsInterface> openPanels = new HashMap<>(); //player name and panel interface
public HashSet<String> skipPanelClose = new HashSet<>(); //don't remove the player if they are in this list public HashSet<String> skipPanelClose = new HashSet<>(); //don't remove the player if they are in this list
//this will return the panel CF based on the player, if it isn't there it returns null //this will return the panel CF based on the player, if it isn't there it returns null
public Panel getOpenPanel(String playerName){ public Panel getOpenPanel(String playerName, PanelPosition position){
for(Map.Entry<String, Panel> entry : openPanels.entrySet()){ for(Map.Entry<String, PanelsInterface> entry : openPanels.entrySet()){
if(entry.getKey().equals(playerName)){ if(entry.getKey().equals(playerName)){
return entry.getValue(); return entry.getValue().getPanel(position);
} }
} }
return null; return null;
} }
//this will return the panel CF based on the player, if it isn't there it returns null //true if the player has the corresponding panel open in the location
public String getOpenPanelName(String playerName){ public boolean hasPanelOpen(String playerName, String panelName, PanelPosition position){
for(Map.Entry<String, Panel> entry : openPanels.entrySet()){ for(Map.Entry<String, PanelsInterface> entry : openPanels.entrySet()){
if(entry.getKey().equals(playerName)){ try {
return entry.getValue().getName(); if (entry.getKey().equals(playerName) && entry.getValue().getPanel(position).getName().equals(panelName)) {
}
}
return null;
}
//true if the player has a panel open
public boolean hasPanelOpen(String playerName, String panelName){
for(Map.Entry<String, Panel> entry : openPanels.entrySet()){
if(entry.getKey().equals(playerName) && entry.getValue().getName().equals(panelName)){
return true; return true;
} }
}catch (NullPointerException ex){
return false;
}
} }
return false; return false;
} }
//true if the player has a panel open //true if the player has a panel open
public boolean hasPanelOpen(String playerName) { public boolean hasPanelOpen(String playerName, PanelPosition position) {
for(Map.Entry<String, Panel> entry : openPanels.entrySet()){ for(Map.Entry<String, PanelsInterface> entry : openPanels.entrySet()){
if(entry.getKey().equals(playerName)){ try {
if(entry.getKey().equals(playerName) && entry.getValue().getPanel(position) != null){
return true; return true;
} }
}catch (NullPointerException ex){
return false;
}
} }
return false; return false;
} }
//tell loader that a panel has been opened //tell loader that a panel has been opened
public void openPanelForLoader(String playerName, Panel panel){ public void openPanelForLoader(String playerName, Panel panel, PanelPosition position){
openPanels.put(playerName, panel); if(!openPanels.containsKey(playerName)){
openPanels.put(playerName, new PanelsInterface(playerName));
}
openPanels.get(playerName).setPanel(panel,position);
openPanels.get(playerName).getPanel(position).isOpen = true;
if (plugin.config.contains("config.panel-snooper")) { if (plugin.config.contains("config.panel-snooper")) {
if (Objects.requireNonNull(plugin.config.getString("config.panel-snooper")).trim().equalsIgnoreCase("true")) { if (Objects.requireNonNull(plugin.config.getString("config.panel-snooper")).trim().equalsIgnoreCase("true")) {
Bukkit.getConsoleSender().sendMessage("[CommandPanels] " + playerName + " Opened " + panel.getName()); Bukkit.getConsoleSender().sendMessage("[CommandPanels] " + playerName + " Opened " + panel.getName() + " at " + position);
} }
} }
} }
//close all of the panels for a player currently open //close all of the panels for a player currently open
public void closePanelForLoader(String playerName){ public void closePanelForLoader(String playerName, PanelPosition position){
if(!openPanels.containsKey(playerName) || skipPanelClose.contains(playerName)){ if(!openPanels.containsKey(playerName) || skipPanelClose.contains(playerName)){
return; return;
} }
panelCloseCommands(playerName,openPanels.get(playerName)); panelCloseCommands(playerName,position,openPanels.get(playerName).getPanel(position));
if (plugin.config.contains("config.panel-snooper")) { if (plugin.config.contains("config.panel-snooper")) {
if (Objects.requireNonNull(plugin.config.getString("config.panel-snooper")).equalsIgnoreCase("true")) { if (Objects.requireNonNull(plugin.config.getString("config.panel-snooper")).equalsIgnoreCase("true")) {
Bukkit.getConsoleSender().sendMessage("[CommandPanels] " + playerName + " Closed " + openPanels.get(playerName).getName()); Bukkit.getConsoleSender().sendMessage("[CommandPanels] " + playerName + " Closed " + openPanels.get(playerName).getPanel(position).getName() + " at " + position);
} }
} }
//fire PanelClosedEvent //fire PanelClosedEvent
PanelClosedEvent closedEvent = new PanelClosedEvent(Bukkit.getPlayer(playerName),openPanels.get(playerName)); PanelClosedEvent closedEvent = new PanelClosedEvent(Bukkit.getPlayer(playerName),openPanels.get(playerName).getPanel(position),position);
Bukkit.getPluginManager().callEvent(closedEvent); Bukkit.getPluginManager().callEvent(closedEvent);
openPanels.get(playerName).setPanel(null,position);
//remove if all panels closed or if top panel is closed
if(openPanels.get(playerName).allClosed()){
removePlayer(playerName);
}else if(openPanels.get(playerName).getPanel(PanelPosition.Top) == null){
removePlayer(playerName);
}
//fix up the inventory
plugin.inventorySaver.restoreInventory(Bukkit.getPlayer(playerName),position);
}
//removes player from openPanels map
public void removePlayer(String playerName){
openPanels.get(playerName).setPanel(null,PanelPosition.Top);
openPanels.get(playerName).setPanel(null,PanelPosition.Middle);
openPanels.get(playerName).setPanel(null,PanelPosition.Bottom);
openPanels.remove(playerName); openPanels.remove(playerName);
} }
public void panelCloseCommands(String playerName, Panel panel){ public void panelCloseCommands(String playerName,PanelPosition position, Panel panel){
if (panel.getConfig().contains("commands-on-close")) { if (panel.getConfig().contains("commands-on-close")) {
//execute commands on panel close //execute commands on panel close
try { try {
List<String> commands = panel.getConfig().getStringList("commands-on-close"); plugin.commandTags.runCommands(panel,position,Bukkit.getPlayer(playerName),panel.getConfig().getStringList("commands-on-close"));
for (String command : commands) {
int val = plugin.commandTags.commandPayWall(Bukkit.getPlayer(playerName),command);
if(val == 0){
break;
}
if(val == 2){
plugin.commandTags.runCommand(panel,Bukkit.getPlayer(playerName), command);
}
}
}catch(Exception s){ }catch(Exception s){
plugin.debug(s,null); plugin.debug(s,null);
} }

View File

@ -0,0 +1,8 @@
package me.rockyhawk.commandpanels.openpanelsmanager;
public enum PanelOpenType {
Editor,
Normal,
Return,
Refresh
}

View File

@ -0,0 +1,7 @@
package me.rockyhawk.commandpanels.openpanelsmanager;
public enum PanelPosition {
Top,
Middle,
Bottom
}

View File

@ -26,7 +26,7 @@ public class UtilsPanelsLoader implements Listener {
//tell panel loader that player has opened panel //tell panel loader that player has opened panel
@EventHandler @EventHandler
public void onPlayerClosePanel(PlayerQuitEvent e){ public void onPlayerClosePanel(PlayerQuitEvent e){
plugin.openPanels.closePanelForLoader(e.getPlayer().getName()); plugin.openPanels.closePanelForLoader(e.getPlayer().getName(),PanelPosition.Top);
Player p = e.getPlayer(); Player p = e.getPlayer();
p.updateInventory(); p.updateInventory();
for(ItemStack itm : p.getInventory().getContents()){ for(ItemStack itm : p.getInventory().getContents()){
@ -44,7 +44,7 @@ public class UtilsPanelsLoader implements Listener {
//only do this if editor is disabled as it will disabled this code //only do this if editor is disabled as it will disabled this code
if(!Objects.requireNonNull(plugin.config.getString("config.ingame-editor")).equalsIgnoreCase("true")) { if(!Objects.requireNonNull(plugin.config.getString("config.ingame-editor")).equalsIgnoreCase("true")) {
//this is put here to avoid conflicts, close panel if it is closed //this is put here to avoid conflicts, close panel if it is closed
plugin.openPanels.closePanelForLoader(e.getPlayer().getName()); plugin.openPanels.closePanelForLoader(e.getPlayer().getName(),PanelPosition.Top);
} }
} }
@ -52,7 +52,7 @@ public class UtilsPanelsLoader implements Listener {
public void onInventoryItemClick(InventoryClickEvent e){ public void onInventoryItemClick(InventoryClickEvent e){
//this will check to ensure an item is not from CommandPanels on inventory open //this will check to ensure an item is not from CommandPanels on inventory open
Player p = (Player)e.getWhoClicked(); Player p = (Player)e.getWhoClicked();
if(!plugin.openPanels.hasPanelOpen(p.getName())){ if(!plugin.openPanels.hasPanelOpen(p.getName(),PanelPosition.Top)){
for(ItemStack itm : p.getInventory().getContents()){ for(ItemStack itm : p.getInventory().getContents()){
if(plugin.openPanels.isNBTInjected(itm)){ if(plugin.openPanels.isNBTInjected(itm)){
p.getInventory().remove(itm); p.getInventory().remove(itm);
@ -65,14 +65,14 @@ public class UtilsPanelsLoader implements Listener {
@EventHandler(priority = EventPriority.HIGHEST) @EventHandler(priority = EventPriority.HIGHEST)
public void vanillaOpenedEvent(InventoryOpenEvent e){ public void vanillaOpenedEvent(InventoryOpenEvent e){
if(e.isCancelled()) { if(e.isCancelled()) {
if (plugin.openPanels.hasPanelOpen(e.getPlayer().getName())) { if (plugin.openPanels.hasPanelOpen(e.getPlayer().getName(),PanelPosition.Top)) {
Panel closedPanel = plugin.openPanels.getOpenPanel(e.getPlayer().getName()); Panel closedPanel = plugin.openPanels.getOpenPanel(e.getPlayer().getName(),PanelPosition.Top);
//manually remove player with no skip checks //manually remove player with no skip checks
plugin.openPanels.openPanels.remove(e.getPlayer().getName()); plugin.openPanels.removePlayer(e.getPlayer().getName());
//fire PanelClosedEvent //fire PanelClosedEvent
PanelClosedEvent closedEvent = new PanelClosedEvent(Bukkit.getPlayer(e.getPlayer().getName()),closedPanel); PanelClosedEvent closedEvent = new PanelClosedEvent(Bukkit.getPlayer(e.getPlayer().getName()),closedPanel, PanelPosition.Top);
Bukkit.getPluginManager().callEvent(closedEvent); Bukkit.getPluginManager().callEvent(closedEvent);
//do message //do message

View File

@ -2,6 +2,7 @@ package me.rockyhawk.commandpanels.openwithitem;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.api.Panel;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -49,11 +50,11 @@ public class HotbarItemLoader {
} }
if(panel.getConfig().contains("open-with-item.commands")){ if(panel.getConfig().contains("open-with-item.commands")){
for(String command : panel.getConfig().getStringList("open-with-item.commands")){ for(String command : panel.getConfig().getStringList("open-with-item.commands")){
plugin.commandTags.runCommand(panel,p, command); plugin.commandTags.runCommand(panel,PanelPosition.Top,p, command);
} }
return true; return true;
} }
panel.open(p); panel.open(p, PanelPosition.Top);
} }
return true; return true;
} }
@ -86,11 +87,11 @@ public class HotbarItemLoader {
} }
if(panel.getConfig().contains("open-with-item.commands")){ if(panel.getConfig().contains("open-with-item.commands")){
for(String command : panel.getConfig().getStringList("open-with-item.commands")){ for(String command : panel.getConfig().getStringList("open-with-item.commands")){
plugin.commandTags.runCommand(panel,p, command); plugin.commandTags.runCommand(panel,PanelPosition.Top,p, command);
} }
return true; return true;
} }
panel.open(p); panel.open(p,PanelPosition.Top);
} }
return true; return true;
} }

View File

@ -2,6 +2,7 @@ package me.rockyhawk.commandpanels.openwithitem;
import de.jeff_media.chestsort.api.ChestSortEvent; import de.jeff_media.chestsort.api.ChestSortEvent;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.inventory.InventoryType;
@ -13,6 +14,12 @@ public class UtilsChestSortEvent implements Listener {
} }
@EventHandler @EventHandler
public void onChestSortEvent(ChestSortEvent e){ public void onChestSortEvent(ChestSortEvent e){
//cancel if a panel is opened at all
if(plugin.openPanels.hasPanelOpen(e.getPlayer().getName(), PanelPosition.Top)){
e.setCancelled(true);
return;
}
//hotbar item code below
if(!plugin.openWithItem){ if(!plugin.openWithItem){
//if none of the panels have open-with-item //if none of the panels have open-with-item
return; return;

View File

@ -39,7 +39,7 @@ public class UtilsOpenWithItem implements Listener {
//skip if null to stop errors //skip if null to stop errors
return; return;
} }
if(e.getClickedInventory().getType() == InventoryType.PLAYER) { if(e.getClickedInventory().getType() == InventoryType.PLAYER && !e.isCancelled()) {
if (plugin.hotbar.stationaryExecute(e.getSlot(), p, true)) { if (plugin.hotbar.stationaryExecute(e.getSlot(), p, true)) {
e.setCancelled(true); e.setCancelled(true);
p.updateInventory(); p.updateInventory();

View File

@ -1,6 +1,7 @@
package me.rockyhawk.commandpanels.panelblocks; package me.rockyhawk.commandpanels.panelblocks;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -31,7 +32,7 @@ public class PanelBlockOnClick implements Listener {
if(!plugin.blockConfig.contains("blocks")){ if(!plugin.blockConfig.contains("blocks")){
return; return;
} }
if(plugin.openPanels.hasPanelOpen(p.getName())) { if(plugin.openPanels.hasPanelOpen(p.getName(), PanelPosition.Top)) {
//some blocks run this event twice, skip if panel already open //some blocks run this event twice, skip if panel already open
//as blocks cannot be clicked obviously if a panel is open //as blocks cannot be clicked obviously if a panel is open
return; return;
@ -43,13 +44,13 @@ public class PanelBlockOnClick implements Listener {
e.setCancelled(true); e.setCancelled(true);
if(plugin.blockConfig.contains("blocks." + configLocation + ".commands")){ if(plugin.blockConfig.contains("blocks." + configLocation + ".commands")){
for(String command : plugin.blockConfig.getStringList("blocks." + configLocation + ".commands")){ for(String command : plugin.blockConfig.getStringList("blocks." + configLocation + ".commands")){
plugin.commandTags.runCommand(null,p, command); plugin.commandTags.runCommand(null,PanelPosition.Top,p, command);
} }
return; return;
} }
//uses the open= tag because it will open a panel with panel names, but also works with open= features like placeholders //uses the open= tag because it will open a panel with panel names, but also works with open= features like placeholders
String command = "open= " + plugin.blockConfig.getString("blocks." + configLocation + ".panel"); String command = "open= " + plugin.blockConfig.getString("blocks." + configLocation + ".panel");
plugin.commandTags.runCommand(null,p, command); plugin.commandTags.runCommand(null,PanelPosition.Top,p, command);
} }
} }
} }

View File

@ -0,0 +1,127 @@
package me.rockyhawk.commandpanels.playerinventoryhandler;
import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.Panel;
import me.rockyhawk.commandpanels.api.PanelClosedEvent;
import me.rockyhawk.commandpanels.api.PanelOpenedEvent;
import me.rockyhawk.commandpanels.ioclasses.legacy.MinecraftVersions;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.inventory.meta.PotionMeta;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
public class InventorySaver implements Listener {
CommandPanels plugin;
public InventorySaver(CommandPanels pl) {
this.plugin = pl;
}
public YamlConfiguration inventoryConfig;
public void saveInventoryFile(){
try {
inventoryConfig.save(plugin.getDataFolder() + File.separator + "inventories.yml");
} catch (IOException s) {
s.printStackTrace();
plugin.debug(s,null);
}
}
@EventHandler
public void onOpen(PanelOpenedEvent e){
if(e.getPosition() != PanelPosition.Top) {
addInventory(e.getPlayer());
}
}
@EventHandler
public void playerJoined(PlayerJoinEvent e){
restoreInventory(e.getPlayer(), PanelPosition.Top);
}
public void restoreInventory(Player p, PanelPosition position){
if(p == null){
return;
}
if(plugin.openPanels.hasPanelOpen(p.getName(),PanelPosition.Middle) || plugin.openPanels.hasPanelOpen(p.getName(),PanelPosition.Bottom)){
if(position == PanelPosition.Bottom){
for(int s = 0; s < 9; s++){
p.getInventory().setItem(s,null);
}
}else if(position == PanelPosition.Middle){
for(int s = 9; s < 36; s++){
p.getInventory().setItem(s,null);
}
}
return;
}
if(inventoryConfig.isSet(p.getUniqueId().toString())){
p.getInventory().setContents(plugin.itemSerializer.itemStackArrayFromBase64(inventoryConfig.getString(p.getUniqueId().toString())));
inventoryConfig.set(p.getUniqueId().toString(),null);
}
}
public void addInventory(Player p){
if(!inventoryConfig.contains(p.getUniqueId().toString())){
inventoryConfig.set(p.getUniqueId().toString(),plugin.itemSerializer.itemStackArrayToBase64(p.getInventory().getContents()));
p.getInventory().clear();
}
}
public ItemStack[] getNormalInventory(Player p){
if(hasNormalInventory(p)){
return p.getInventory().getContents();
}else{
return plugin.itemSerializer.itemStackArrayFromBase64(inventoryConfig.getString(p.getUniqueId().toString()));
}
}
public boolean hasNormalInventory(Player p){
return !inventoryConfig.isSet(p.getUniqueId().toString());
}
public void addItem(Player p, ItemStack item){
if(hasNormalInventory(p)){
if (p.getInventory().firstEmpty() >= 0) {
p.getInventory().addItem(item);
return;
}
}else {
List<ItemStack> cont = new ArrayList<>(Arrays.asList(getNormalInventory(p)));
boolean found = false;
for (int i = 0; 36 > i; i++){
if(cont.get(i) == null){
cont.set(i,item);
found = true;
break;
}
if(cont.get(i).isSimilar(item)){
cont.get(i).setAmount(cont.get(i).getAmount()+1);
found = true;
break;
}
}
if(found){
inventoryConfig.set(p.getUniqueId().toString(), plugin.itemSerializer.itemStackArrayToBase64(cont.toArray(new ItemStack[0])));
return;
}
}
p.getLocation().getWorld().dropItemNaturally(p.getLocation(), item);
}
}

View File

@ -0,0 +1,59 @@
package me.rockyhawk.commandpanels.playerinventoryhandler;
import me.rockyhawk.commandpanels.CommandPanels;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.io.BukkitObjectInputStream;
import org.bukkit.util.io.BukkitObjectOutputStream;
import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class ItemStackSerializer {
CommandPanels plugin;
public ItemStackSerializer(CommandPanels pl) {
this.plugin = pl;
}
public String itemStackArrayToBase64(ItemStack[] items) {
try {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream);
// Write the size of the inventory
dataOutput.writeInt(items.length);
// Save every element in the list
for (ItemStack item : items) {
dataOutput.writeObject(item);
}
// Serialize that array
dataOutput.close();
return Base64Coder.encodeLines(outputStream.toByteArray());
} catch (Exception e) {
plugin.debug(e,null);
}
return null;
}
public ItemStack[] itemStackArrayFromBase64(String data) {
try {
ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64Coder.decodeLines(data));
BukkitObjectInputStream dataInput = new BukkitObjectInputStream(inputStream);
ItemStack[] items = new ItemStack[dataInput.readInt()];
// Read the serialized inventory
for (int i = 0; i < items.length; i++) {
items[i] = (ItemStack) dataInput.readObject();
}
dataInput.close();
return items;
} catch (ClassNotFoundException | IOException e) {
plugin.debug(e,null);
}
return null;
}
}

View File

@ -3,6 +3,9 @@ package me.rockyhawk.commandpanels.updater;
import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.CommandPanels;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import java.io.*; import java.io.*;
@ -11,7 +14,7 @@ import java.net.URL;
import java.util.Objects; import java.util.Objects;
import java.util.logging.Level; import java.util.logging.Level;
public class Updater { public class Updater implements Listener {
CommandPanels plugin; CommandPanels plugin;
public Updater(CommandPanels pl) { public Updater(CommandPanels pl) {
this.plugin = pl; this.plugin = pl;
@ -22,7 +25,27 @@ public class Updater {
public String downloadVersionManually = null; public String downloadVersionManually = null;
public String catchedLatestVersion = "null"; public String catchedLatestVersion = "null";
public String githubNewUpdate(boolean sendMessages){ //send update message when the player joins the game with the permission
@EventHandler
public void joinGame(PlayerJoinEvent e){
if(e.getPlayer().hasPermission("commandpanel.update")){
if(githubNewUpdate(false)){
new BukkitRunnable() {
@Override
public void run() {
plugin.tex.sendMessage(e.getPlayer(),ChatColor.YELLOW + "A new update is available for download!");
plugin.tex.sendString(e.getPlayer(),ChatColor.YELLOW
+ "Current version "
+ ChatColor.RED + plugin.getDescription().getVersion() + ChatColor.YELLOW
+ " Latest version " + ChatColor.GREEN + catchedLatestVersion);
this.cancel();
}
}.runTaskTimer(plugin, 30, 1); //20 ticks == 1 second
}
}
}
public boolean githubNewUpdate(boolean sendMessages){
//refresh latest version //refresh latest version
getLatestVersion(sendMessages); getLatestVersion(sendMessages);
@ -30,14 +53,11 @@ public class Updater {
if(sendMessages) { if(sendMessages) {
Bukkit.getConsoleSender().sendMessage("[CommandPanels]" + ChatColor.GREEN + " Running a custom version."); Bukkit.getConsoleSender().sendMessage("[CommandPanels]" + ChatColor.GREEN + " Running a custom version.");
} }
return null; return false;
} }
//if update is true there is a new update //if update is true there is a new update
boolean update = false; boolean update = !catchedLatestVersion.equals(plugin.getDescription().getVersion());
if(!catchedLatestVersion.equals(plugin.getDescription().getVersion())){
update = true;
}
if(update){ if(update){
if(sendMessages) { if(sendMessages) {
@ -47,11 +67,12 @@ public class Updater {
Bukkit.getConsoleSender().sendMessage("[CommandPanels]" + ChatColor.WHITE + " following command:" + ChatColor.AQUA + " /cpv latest" + ChatColor.WHITE + " and restart the server"); Bukkit.getConsoleSender().sendMessage("[CommandPanels]" + ChatColor.WHITE + " following command:" + ChatColor.AQUA + " /cpv latest" + ChatColor.WHITE + " and restart the server");
Bukkit.getConsoleSender().sendMessage("[CommandPanels]" + ChatColor.GOLD + " ================================================"); Bukkit.getConsoleSender().sendMessage("[CommandPanels]" + ChatColor.GOLD + " ================================================");
} }
return true;
} }
return catchedLatestVersion; return false;
} }
public void getLatestVersion(boolean sendMessages){ public String getLatestVersion(boolean sendMessages){
//check for null //check for null
if(catchedLatestVersion.equals("null")){ if(catchedLatestVersion.equals("null")){
catchedLatestVersion = plugin.getDescription().getVersion(); catchedLatestVersion = plugin.getDescription().getVersion();
@ -77,6 +98,7 @@ public class Updater {
Bukkit.getConsoleSender().sendMessage("[CommandPanels]" + ChatColor.RED + " Cannot check for update."); Bukkit.getConsoleSender().sendMessage("[CommandPanels]" + ChatColor.RED + " Cannot check for update.");
} }
} }
return catchedLatestVersion;
} }
//the pluginFileName can only be obtained from the main class //the pluginFileName can only be obtained from the main class