Skip to content

Commit cad4c56

Browse files
committed
fix dupe
1 parent ce362d7 commit cad4c56

8 files changed

Lines changed: 107 additions & 17 deletions

File tree

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package cz.neumimto.rpg.api.skills;
2+
3+
import cz.neumimto.rpg.api.effects.EffectService;
4+
import cz.neumimto.rpg.api.effects.IEffect;
5+
import cz.neumimto.rpg.api.entity.players.IActiveCharacter;
6+
import cz.neumimto.rpg.api.skills.types.ActiveSkill;
7+
8+
import javax.inject.Inject;
9+
10+
public abstract class ToggleableSkill<T extends IActiveCharacter> extends ActiveSkill<T> {
11+
12+
@Inject
13+
private EffectService effectService;
14+
15+
@Override
16+
public SkillResult cast(T character, PlayerSkillContext info) {
17+
if (character.hasEffect(getEffectName())) {
18+
character.removeEffect(getEffectName());
19+
return SkillResult.OK;
20+
} else {
21+
effectService.addEffect(constructEffect(character, info));
22+
return SkillResult.OK_NO_COOLDOWN;
23+
}
24+
}
25+
26+
public abstract String getEffectName();
27+
28+
public abstract IEffect constructEffect(T character, PlayerSkillContext info);
29+
}

Common/src/main/java/cz/neumimto/rpg/common/inventory/AbstractInventoryService.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,11 @@ public void initializeManagedSlots(T activeCharacter) {
5555
for (SlotEffectSource value : mi.getSlots().values()) {
5656
ManagedSlot slot;
5757
if (value.getSlotId() == offhandId) {
58-
slot = new FilteredManagedSlotImpl(value.getSlotId(), item -> activeCharacter.canUse(item.getItemType(), EntityHand.OFF));
58+
slot = new FilteredManagedSlotImpl(value.getSlotId(),
59+
item -> activeCharacter.canUse(item.getItemType(), EntityHand.OFF));
5960
} else if (armorIds.contains(value.getSlotId())) {
60-
slot = new FilteredManagedSlotImpl(value.getSlotId(), item -> activeCharacter.canWear(item.getItemType()));
61+
slot = new FilteredManagedSlotImpl(value.getSlotId(),
62+
item -> activeCharacter.canWear(item.getItemType()));
6163
} else if (value.getSlotId() >= 0 && value.getSlotId() < 9) {
6264
slot = new FilteredManagedSlotImpl(value.getSlotId(), item
6365
-> activeCharacter.canUse(item.getItemType(), EntityHand.MAIN));

Implementations/Spigot/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
plugins {
22
id 'java'
33
id 'com.github.johnrengelman.shadow' version '4.0.4'
4+
id "de.undercouch.download" version "4.1.1"
45
}
56

67
repositories {

Implementations/Spigot/src/main/java/cz/neumimto/rpg/spigot/entities/players/SpigotCharacter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public class SpigotCharacter extends ActiveCharacter<Player, SpigotParty> implem
2121

2222
private ISkill soedc;
2323
private Map<String, SpigotSkillTreeViewModel> skillTreeviewLocation = new HashMap<>();
24-
private boolean spellbookRotationActive = true;
24+
private boolean spellbookRotationActive = false;
2525
private ItemStack[][] spellbook;
2626
private int spellbookPage;
2727

Implementations/Spigot/src/main/java/cz/neumimto/rpg/spigot/listeners/SpigotDamageListener.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.bukkit.event.entity.EntityDamageByEntityEvent;
3131
import org.bukkit.event.entity.EntityDamageEvent;
3232
import org.bukkit.event.entity.ProjectileHitEvent;
33+
import org.bukkit.inventory.EquipmentSlot;
3334
import org.bukkit.inventory.ItemStack;
3435
import org.bukkit.inventory.PlayerInventory;
3536
import org.bukkit.projectiles.ProjectileSource;
@@ -136,7 +137,7 @@ private void processWeaponDamageEarly(EntityDamageByEntityEvent event, EntityDam
136137
int selectedSlotIndex = inventory.getHeldItemSlot();
137138
if (last != selectedSlotIndex) {
138139
SpigotInventoryListener.prepareItemInHand(player, character, player.getItemInHand(),
139-
selectedSlotIndex, null, itemService, inventoryHandler);
140+
selectedSlotIndex, null, EquipmentSlot.HAND, itemService, inventoryHandler);
140141
}
141142

142143
if (character.requiresDamageRecalculation()) {

Implementations/Spigot/src/main/java/cz/neumimto/rpg/spigot/listeners/SpigotInventoryListener.java

Lines changed: 44 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import net.md_5.bungee.api.chat.TextComponent;
2727
import org.bukkit.Bukkit;
2828
import org.bukkit.ChatColor;
29+
import org.bukkit.GameMode;
2930
import org.bukkit.Material;
3031
import org.bukkit.entity.EntityType;
3132
import org.bukkit.entity.HumanEntity;
@@ -42,6 +43,7 @@
4243
import org.bukkit.event.player.PlayerDropItemEvent;
4344
import org.bukkit.event.player.PlayerInteractEvent;
4445
import org.bukkit.event.player.PlayerSwapHandItemsEvent;
46+
import org.bukkit.inventory.EquipmentSlot;
4547
import org.bukkit.inventory.ItemStack;
4648
import org.bukkit.inventory.PlayerInventory;
4749

@@ -142,6 +144,7 @@ public void itemEquipEvent(InventoryCloseEvent event) {
142144
return;
143145
}
144146
HumanEntity player = event.getPlayer();
147+
145148
if (player instanceof Player) {
146149
Player p = (Player) player;
147150
ISpigotCharacter character = spigotCharacterService.getCharacter(player.getUniqueId());
@@ -163,6 +166,9 @@ public void onItemDrop(PlayerDropItemEvent event) {
163166
if (spigotRpg.isDisabledInWorld(event.getPlayer())) {
164167
return;
165168
}
169+
if (event.getPlayer().getGameMode() == GameMode.CREATIVE) {
170+
return;
171+
}
166172
Player player = event.getPlayer();
167173
IActiveCharacter character = spigotCharacterService.getCharacter(player);
168174
if (character.isStub()) {
@@ -199,6 +205,9 @@ public void onSwapHands(PlayerSwapHandItemsEvent event) {
199205
if (spigotRpg.isDisabledInWorld(event.getPlayer())) {
200206
return;
201207
}
208+
if (event.getPlayer().getGameMode() == GameMode.CREATIVE) {
209+
return;
210+
}
202211
ItemStack futureMainHand = event.getMainHandItem();
203212
ItemStack futureOffHand = event.getOffHandItem();
204213
if (futureMainHand.getType() == Material.AIR && futureOffHand.getType() == Material.AIR) {
@@ -265,6 +274,9 @@ public void onHotbarInteract(PlayerInteractEvent event) {
265274
return;
266275
}
267276
Player player = event.getPlayer();
277+
if (player.getGameMode() == GameMode.CREATIVE) {
278+
return;
279+
}
268280
ISpigotCharacter character = spigotCharacterService.getCharacter(player);
269281
if (character.isStub()) {
270282
return;
@@ -293,7 +305,8 @@ public void onHotbarInteract(PlayerInteractEvent event) {
293305

294306
if (last != selectedSlotIndex) {
295307

296-
boolean b = prepareItemInHand(player, character, itemStack, selectedSlotIndex, rpgItemType, itemService, inventoryHandler);
308+
boolean b = prepareItemInHand(player, character, itemStack, selectedSlotIndex, rpgItemType,
309+
event.getHand(), itemService, inventoryHandler);
297310
event.setCancelled(b);
298311
}
299312
}
@@ -302,7 +315,9 @@ public void onHotbarInteract(PlayerInteractEvent event) {
302315

303316
public static boolean prepareItemInHand(Player player, ISpigotCharacter character, ItemStack itemStack,
304317
int selectedSlotIndex, RpgItemType rpgItemType,
305-
SpigotItemService itemService, InventoryHandler inventoryHandler) {
318+
EquipmentSlot hand,
319+
SpigotItemService itemService,
320+
InventoryHandler inventoryHandler) {
306321
Map<Class<?>, RpgInventory> managedInventory = character.getManagedInventory();
307322
Map<Integer, ManagedSlot> managedSlots = managedInventory.get(PlayerInventory.class).getManagedSlots();
308323

@@ -326,15 +341,29 @@ public static boolean prepareItemInHand(Player player, ISpigotCharacter characte
326341
if (inventoryHandler.handleCharacterEquipActionPre(character, managedSlot, rpgItemStack)) {
327342
inventoryHandler.handleInventoryInitializationPost(character);
328343
character.setLastHotbarSlotInteraction(selectedSlotIndex);
329-
character.setMainHand(rpgItemStack, selectedSlotIndex);
344+
if (hand == EquipmentSlot.HAND) {
345+
character.setMainHand(rpgItemStack, selectedSlotIndex);
346+
} else if (hand == EquipmentSlot.OFF_HAND) {
347+
character.setOffHand(rpgItemStack);
348+
}
330349
character.setRequiresDamageRecalculation(true);
331350
return false;
332351
} else {
333-
player.getWorld().dropItemNaturally(player.getLocation(), itemStack);
334-
String message = Rpg.get().getLocalizationService().translate(LocalizationKeys.CANNOT_USE_ITEM_CONFIGURATION_REASON);
335-
BaseComponent c = TextComponent.fromLegacyText(ChatColor.RED + message)[0];
336-
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, c);
337-
player.getInventory().setItemInMainHand(null);
352+
if (player.getGameMode() != GameMode.CREATIVE) {
353+
354+
if (hand == EquipmentSlot.HAND) {
355+
player.getInventory().setItemInMainHand(null);
356+
} else if (hand == EquipmentSlot.OFF_HAND) {
357+
player.getInventory().setItemInOffHand(null);
358+
}
359+
360+
String message = Rpg.get().getLocalizationService().translate(LocalizationKeys.CANNOT_USE_ITEM_CONFIGURATION_REASON);
361+
BaseComponent c = TextComponent.fromLegacyText(ChatColor.RED + message)[0];
362+
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, c);
363+
364+
player.getWorld().dropItemNaturally(player.getLocation(), itemStack);
365+
366+
}
338367
character.setLastHotbarSlotInteraction(-1);
339368
character.setRequiresDamageRecalculation(true);
340369
return true;
@@ -348,6 +377,7 @@ public void onDrag(InventoryDragEvent event) {
348377
if (spigotRpg.isDisabledInWorld(event.getWhoClicked())) {
349378
return;
350379
}
380+
351381
for (Integer slotId : event.getInventorySlots()) {
352382
if (inventoryService.isManagedInventory(PlayerInventory.class, slotId) || slotId == OFFHAND_SLOT_ID || (slotId >= 0 && slotId <= 8)) {
353383
event.setResult(Event.Result.DENY);
@@ -362,10 +392,16 @@ public void onInteract(InventoryClickEvent event) {
362392
}
363393
HumanEntity whoClicked = event.getWhoClicked();
364394
if (whoClicked instanceof Player) {
395+
Player player = (Player) whoClicked;
396+
if (player.getGameMode() == GameMode.CREATIVE) {
397+
return;
398+
}
365399
int slotId = event.getSlot();
366400
if (!inventoryService.isManagedInventory(PlayerInventory.class, slotId)) {
367401
return;
368402
}
403+
404+
369405
IActiveCharacter character = spigotCharacterService.getCharacter(whoClicked.getUniqueId());
370406
Map<Class<?>, RpgInventory> managedInventory = character.getManagedInventory();
371407
RpgInventory rpgInventory = managedInventory.get(PlayerInventory.class);
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package cz.neumimto.rpg.spigot.skills;
2+
3+
import cz.neumimto.rpg.api.ResourceLoader;
4+
import cz.neumimto.rpg.api.effects.IEffect;
5+
import cz.neumimto.rpg.api.skills.PlayerSkillContext;
6+
import cz.neumimto.rpg.api.skills.SkillResult;
7+
import cz.neumimto.rpg.api.skills.ToggleableSkill;
8+
import cz.neumimto.rpg.api.skills.types.ActiveSkill;
9+
import cz.neumimto.rpg.spigot.entities.players.ISpigotCharacter;
10+
11+
import javax.inject.Singleton;
12+
13+
@Singleton
14+
@ResourceLoader.Skill("ntrpg:levitate")
15+
public class Levitate extends ToggleableSkill<ISpigotCharacter> {
16+
17+
@Override
18+
public String getEffectName() {
19+
return "";
20+
}
21+
22+
@Override
23+
public IEffect constructEffect(ISpigotCharacter character, PlayerSkillContext info) {
24+
return null;
25+
}
26+
}

Implementations/Spigot/src/main/java/cz/neumimto/rpg/spigot/skills/StormDive.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,17 @@
11
package cz.neumimto.rpg.spigot.skills;
22

33
import cz.neumimto.rpg.api.ResourceLoader;
4-
import cz.neumimto.rpg.api.Rpg;
54
import cz.neumimto.rpg.api.effects.EffectBase;
65
import cz.neumimto.rpg.api.effects.IEffect;
7-
import cz.neumimto.rpg.api.entity.IEffectConsumer;
86
import cz.neumimto.rpg.api.skills.PlayerSkillContext;
97
import cz.neumimto.rpg.api.skills.SkillNodes;
108
import cz.neumimto.rpg.api.skills.SkillResult;
119
import cz.neumimto.rpg.api.skills.tree.SkillType;
1210
import cz.neumimto.rpg.spigot.damage.SpigotDamageService;
1311
import cz.neumimto.rpg.spigot.effects.SpigotEffectService;
14-
import cz.neumimto.rpg.spigot.entities.ISpigotEntity;
1512
import cz.neumimto.rpg.spigot.entities.players.ISpigotCharacter;
1613
import cz.neumimto.rpg.spigot.packetwrapper.PacketHandler;
17-
import cz.neumimto.rpg.spigot.skills.scripting.SpigotScriptFunctions;
1814
import cz.neumimto.rpg.spigot.skills.utils.AbstractPacket;
19-
import cz.neumimto.rpg.spigot.skills.utils.Decorator;
2015
import org.bukkit.Bukkit;
2116
import org.bukkit.Location;
2217
import org.bukkit.Particle;

0 commit comments

Comments
 (0)