mirror of
https://github.com/DRE2N/DungeonsXL.git
synced 2024-11-28 13:36:33 +01:00
New external mob system
This commit is contained in:
parent
02317cc208
commit
e34d5218dc
@ -36,6 +36,7 @@ import io.github.dre2n.dungeonsxl.listener.EntityListener;
|
|||||||
import io.github.dre2n.dungeonsxl.listener.HangingListener;
|
import io.github.dre2n.dungeonsxl.listener.HangingListener;
|
||||||
import io.github.dre2n.dungeonsxl.listener.PlayerListener;
|
import io.github.dre2n.dungeonsxl.listener.PlayerListener;
|
||||||
import io.github.dre2n.dungeonsxl.listener.WorldListener;
|
import io.github.dre2n.dungeonsxl.listener.WorldListener;
|
||||||
|
import io.github.dre2n.dungeonsxl.mob.ExternalMobProviders;
|
||||||
import io.github.dre2n.dungeonsxl.player.DGroup;
|
import io.github.dre2n.dungeonsxl.player.DGroup;
|
||||||
import io.github.dre2n.dungeonsxl.player.DPermissions;
|
import io.github.dre2n.dungeonsxl.player.DPermissions;
|
||||||
import io.github.dre2n.dungeonsxl.player.DPlayer;
|
import io.github.dre2n.dungeonsxl.player.DPlayer;
|
||||||
@ -78,6 +79,7 @@ public class DungeonsXL extends BRPlugin {
|
|||||||
private Triggers triggers;
|
private Triggers triggers;
|
||||||
private Dungeons dungeons;
|
private Dungeons dungeons;
|
||||||
private GlobalProtections protections;
|
private GlobalProtections protections;
|
||||||
|
private ExternalMobProviders dMobProviders;
|
||||||
private DPlayers dPlayers;
|
private DPlayers dPlayers;
|
||||||
|
|
||||||
private BukkitTask worldUnloadTask;
|
private BukkitTask worldUnloadTask;
|
||||||
@ -133,6 +135,7 @@ public class DungeonsXL extends BRPlugin {
|
|||||||
loadDSigns();
|
loadDSigns();
|
||||||
loadDungeons();
|
loadDungeons();
|
||||||
loadGlobalProtections();
|
loadGlobalProtections();
|
||||||
|
loadExternalMobProviders();
|
||||||
loadDPlayers();
|
loadDPlayers();
|
||||||
|
|
||||||
manager.registerEvents(new EntityListener(), this);
|
manager.registerEvents(new EntityListener(), this);
|
||||||
@ -431,6 +434,20 @@ public class DungeonsXL extends BRPlugin {
|
|||||||
protections = new GlobalProtections();
|
protections = new GlobalProtections();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the loaded instance of ExternalMobProviders
|
||||||
|
*/
|
||||||
|
public ExternalMobProviders getExternalMobProviders() {
|
||||||
|
return dMobProviders;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* load / reload a new instance of ExternalMobProviders
|
||||||
|
*/
|
||||||
|
public void loadExternalMobProviders() {
|
||||||
|
dMobProviders = new ExternalMobProviders();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the loaded instance of DPlayers
|
* @return the loaded instance of DPlayers
|
||||||
*/
|
*/
|
||||||
|
@ -19,7 +19,9 @@ package io.github.dre2n.dungeonsxl.config;
|
|||||||
import io.github.dre2n.commons.config.BRConfig;
|
import io.github.dre2n.commons.config.BRConfig;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -27,7 +29,7 @@ import org.bukkit.configuration.ConfigurationSection;
|
|||||||
*/
|
*/
|
||||||
public class MainConfig extends BRConfig {
|
public class MainConfig extends BRConfig {
|
||||||
|
|
||||||
public static final int CONFIG_VERSION = 4;
|
public static final int CONFIG_VERSION = 5;
|
||||||
|
|
||||||
private String language = "en";
|
private String language = "en";
|
||||||
private boolean enableEconomy = false;
|
private boolean enableEconomy = false;
|
||||||
@ -40,6 +42,7 @@ public class MainConfig extends BRConfig {
|
|||||||
|
|
||||||
/* Misc */
|
/* Misc */
|
||||||
private boolean sendFloorTitle = true;
|
private boolean sendFloorTitle = true;
|
||||||
|
private Map<String, Object> externalMobProviders = new HashMap<>();
|
||||||
|
|
||||||
/* Secure Mode*/
|
/* Secure Mode*/
|
||||||
private boolean secureModeEnabled = false;
|
private boolean secureModeEnabled = false;
|
||||||
@ -102,6 +105,13 @@ public class MainConfig extends BRConfig {
|
|||||||
return sendFloorTitle;
|
return sendFloorTitle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the custom external mob providers
|
||||||
|
*/
|
||||||
|
public Map<String, Object> getExternalMobProviders() {
|
||||||
|
return externalMobProviders;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the tutorialEndGroup
|
* @return the tutorialEndGroup
|
||||||
*/
|
*/
|
||||||
@ -182,6 +192,10 @@ public class MainConfig extends BRConfig {
|
|||||||
config.set("sendFloorTitle", sendFloorTitle);
|
config.set("sendFloorTitle", sendFloorTitle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!config.contains("externalMobProviders")) {
|
||||||
|
config.createSection("externalMobProviders");
|
||||||
|
}
|
||||||
|
|
||||||
if (!config.contains("secureMode.enabled")) {
|
if (!config.contains("secureMode.enabled")) {
|
||||||
config.set("secureMode.enabled", secureModeEnabled);
|
config.set("secureMode.enabled", secureModeEnabled);
|
||||||
}
|
}
|
||||||
@ -241,6 +255,10 @@ public class MainConfig extends BRConfig {
|
|||||||
sendFloorTitle = config.getBoolean("sendFloorTitle");
|
sendFloorTitle = config.getBoolean("sendFloorTitle");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (config.contains("externalMobProviders")) {
|
||||||
|
externalMobProviders = config.getConfigurationSection("externalMobProviders").getValues(false);
|
||||||
|
}
|
||||||
|
|
||||||
if (config.contains("secureMode.enabled")) {
|
if (config.contains("secureMode.enabled")) {
|
||||||
secureModeEnabled = config.getBoolean("secureMode.enabled");
|
secureModeEnabled = config.getBoolean("secureMode.enabled");
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Daniel Saukel
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package io.github.dre2n.dungeonsxl.mob;
|
||||||
|
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Daniel Saukel
|
||||||
|
*/
|
||||||
|
public class CustomExternalMobProvider implements ExternalMobProvider {
|
||||||
|
|
||||||
|
private String identifier;
|
||||||
|
private String command;
|
||||||
|
|
||||||
|
public CustomExternalMobProvider(String identifier, String command) {
|
||||||
|
this.identifier = identifier;
|
||||||
|
|
||||||
|
if (command.startsWith("/")) {
|
||||||
|
command = command.replaceFirst("/", "");
|
||||||
|
}
|
||||||
|
this.command = command;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomExternalMobProvider(Entry<String, Object> entry) {
|
||||||
|
this(entry.getKey(), (String) entry.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getIdentifier() {
|
||||||
|
return identifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getRawCommand() {
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand(String mob, String world, double x, double y, double z) {
|
||||||
|
return command.replaceAll("%mob%", mob).replaceAll("%world%", world).replaceAll("%x%", String.valueOf(x)).replaceAll("%y%", String.valueOf(y)).replaceAll("%z%", String.valueOf(z));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Daniel Saukel
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package io.github.dre2n.dungeonsxl.mob;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Daniel Saukel
|
||||||
|
*/
|
||||||
|
public enum ExternalMobPlugin implements ExternalMobProvider {
|
||||||
|
|
||||||
|
CUSTOM_MOBS("CM", "ccmob spawn %mob% %world% %x% %y% %z%"),
|
||||||
|
INSANE_MOBS("IM", "insanemobs %mob% %x% %y% %z% %world%"),
|
||||||
|
MYTHIC_MOBS("MM", "mythicmobs mobs spawn %mob% 1 %world%,%x%,%y%,%z%");
|
||||||
|
|
||||||
|
private String identifier;
|
||||||
|
private String command;
|
||||||
|
|
||||||
|
ExternalMobPlugin(String identifier, String command) {
|
||||||
|
this.identifier = identifier;
|
||||||
|
this.command = command;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getIdentifier() {
|
||||||
|
return identifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getRawCommand() {
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCommand(String mob, String world, double x, double y, double z) {
|
||||||
|
return command.replaceAll("%mob%", mob).replaceAll("%world%", world).replaceAll("%x%", String.valueOf(x)).replaceAll("%y%", String.valueOf(y)).replaceAll("%z%", String.valueOf(z));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Daniel Saukel
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package io.github.dre2n.dungeonsxl.mob;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Daniel Saukel
|
||||||
|
*/
|
||||||
|
public interface ExternalMobProvider {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the name of the provider plugin
|
||||||
|
*/
|
||||||
|
public String getIdentifier();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the raw command without replaced variables
|
||||||
|
*/
|
||||||
|
public String getRawCommand();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mob
|
||||||
|
* the mob identifier
|
||||||
|
* @param world
|
||||||
|
* the game world
|
||||||
|
* @param x
|
||||||
|
* the x coordinate
|
||||||
|
* @param y
|
||||||
|
* the y coordinate
|
||||||
|
* @param z
|
||||||
|
* the z coordinate
|
||||||
|
* @return the command with replaced variables
|
||||||
|
*/
|
||||||
|
public String getCommand(String mob, String world, double x, double y, double z);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Daniel Saukel
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package io.github.dre2n.dungeonsxl.mob;
|
||||||
|
|
||||||
|
import io.github.dre2n.dungeonsxl.DungeonsXL;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Daniel Saukel
|
||||||
|
*/
|
||||||
|
public class ExternalMobProviders {
|
||||||
|
|
||||||
|
private Set<ExternalMobProvider> providers = new HashSet<>();
|
||||||
|
|
||||||
|
public ExternalMobProviders() {
|
||||||
|
// Supported providers
|
||||||
|
providers.addAll(Arrays.asList(ExternalMobPlugin.values()));
|
||||||
|
|
||||||
|
// Custom providers
|
||||||
|
for (Entry<String, Object> customExternalMobProvider : DungeonsXL.getInstance().getMainConfig().getExternalMobProviders().entrySet()) {
|
||||||
|
providers.add(new CustomExternalMobProvider(customExternalMobProvider));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param identifier
|
||||||
|
* the identifier for ExternalMob signs
|
||||||
|
*/
|
||||||
|
public ExternalMobProvider getByIdentifier(String identifier) {
|
||||||
|
for (ExternalMobProvider provider : providers) {
|
||||||
|
if (provider.getIdentifier().equals(identifier)) {
|
||||||
|
return provider;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the loaded ExternalMobProviders
|
||||||
|
*/
|
||||||
|
public Set<ExternalMobProvider> getProviders() {
|
||||||
|
return providers;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param provider
|
||||||
|
* the provider to register
|
||||||
|
*/
|
||||||
|
public void addExternalMobProvider(ExternalMobProvider provider) {
|
||||||
|
providers.add(provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param provider
|
||||||
|
* the provider to unregister
|
||||||
|
*/
|
||||||
|
public void removeExternalMobProvider(ExternalMobProvider provider) {
|
||||||
|
providers.remove(provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -30,13 +30,15 @@ public enum DSignTypeDefault implements DSignType {
|
|||||||
CLASSES("Classes", "classes", true, ClassesSign.class),
|
CLASSES("Classes", "classes", true, ClassesSign.class),
|
||||||
COMMAND("CMD", "cmd", false, CommandSign.class),
|
COMMAND("CMD", "cmd", false, CommandSign.class),
|
||||||
END("End", "end", false, EndSign.class),
|
END("End", "end", false, EndSign.class),
|
||||||
|
EXTERNAL_MOB("ExternalMob", "mob", false, ExternalMobSign.class),
|
||||||
FLOOR("Floor", "floor", false, FloorSign.class),
|
FLOOR("Floor", "floor", false, FloorSign.class),
|
||||||
INTERACT("Interact", "interact", true, InteractSign.class),
|
INTERACT("Interact", "interact", true, InteractSign.class),
|
||||||
LEAVE("Leave", "leave", true, LeaveSign.class),
|
LEAVE("Leave", "leave", true, LeaveSign.class),
|
||||||
LOBBY("Lobby", "lobby", true, LobbySign.class),
|
LOBBY("Lobby", "lobby", true, LobbySign.class),
|
||||||
MOB("Mob", "mob", false, DMobSign.class),
|
MOB("Mob", "mob", false, DMobSign.class),
|
||||||
MESSAGE("MSG", "msg", false, MessageSign.class),
|
MESSAGE("MSG", "msg", false, MessageSign.class),
|
||||||
MYTHIC_MOBS("MythicMobs", "mob", false, MythicMobsSign.class),
|
@Deprecated
|
||||||
|
MYTHIC_MOBS("MythicMobs", "mob", false, ExternalMobSign.class),
|
||||||
PLACE("Place", "place", false, PlaceSign.class),
|
PLACE("Place", "place", false, PlaceSign.class),
|
||||||
READY("Ready", "ready", true, ReadySign.class),
|
READY("Ready", "ready", true, ReadySign.class),
|
||||||
REDSTONE("Redstone", "redstone", false, RedstoneSign.class),
|
REDSTONE("Redstone", "redstone", false, RedstoneSign.class),
|
||||||
|
@ -17,9 +17,12 @@
|
|||||||
package io.github.dre2n.dungeonsxl.sign;
|
package io.github.dre2n.dungeonsxl.sign;
|
||||||
|
|
||||||
import io.github.dre2n.commons.util.NumberUtil;
|
import io.github.dre2n.commons.util.NumberUtil;
|
||||||
import io.github.dre2n.dungeonsxl.task.MythicMobSpawnTask;
|
import io.github.dre2n.dungeonsxl.mob.ExternalMobPlugin;
|
||||||
|
import io.github.dre2n.dungeonsxl.mob.ExternalMobProvider;
|
||||||
|
import io.github.dre2n.dungeonsxl.task.ExternalMobSpawnTask;
|
||||||
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
@ -31,24 +34,25 @@ import org.bukkit.scheduler.BukkitTask;
|
|||||||
/**
|
/**
|
||||||
* @author Frank Baumann, Milan Albrecht, Daniel Saukel
|
* @author Frank Baumann, Milan Albrecht, Daniel Saukel
|
||||||
*/
|
*/
|
||||||
public class MythicMobsSign extends DSign implements MobSign {
|
public class ExternalMobSign extends DSign implements MobSign {
|
||||||
|
|
||||||
private DSignType type = DSignTypeDefault.MYTHIC_MOBS;
|
private DSignType type = DSignTypeDefault.EXTERNAL_MOB;
|
||||||
|
|
||||||
// Variables
|
// Variables
|
||||||
private String mob;
|
private String mob;
|
||||||
private int maxInterval = 1;
|
private int maxInterval = 1;
|
||||||
private int interval = 0;
|
private int interval = 0;
|
||||||
private int amount = 1;
|
private int amount = 1;
|
||||||
|
private ExternalMobProvider provider;
|
||||||
private int initialAmount = 1;
|
private int initialAmount = 1;
|
||||||
private boolean initialized;
|
private boolean initialized;
|
||||||
private boolean active;
|
private boolean active;
|
||||||
private BukkitTask task;
|
private BukkitTask task;
|
||||||
private Location spawnLocation;
|
private Location spawnLocation;
|
||||||
private LivingEntity mythicMob;
|
private LivingEntity externalMob;
|
||||||
private ArrayList<Entity> mythicMobs = new ArrayList<>();
|
private List<Entity> externalMobs = new ArrayList<>();
|
||||||
|
|
||||||
public MythicMobsSign(Sign sign, GameWorld gameWorld) {
|
public ExternalMobSign(Sign sign, GameWorld gameWorld) {
|
||||||
super(sign, gameWorld);
|
super(sign, gameWorld);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,7 +138,7 @@ public class MythicMobsSign extends DSign implements MobSign {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initializeTask() {
|
public void initializeTask() {
|
||||||
task = new MythicMobSpawnTask(this).runTaskTimer(plugin, 0L, 20L);
|
task = new ExternalMobSpawnTask(this, provider).runTaskTimer(plugin, 0L, 20L);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -153,33 +157,41 @@ public class MythicMobsSign extends DSign implements MobSign {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the mythicMob
|
* @return the external mob
|
||||||
*/
|
*/
|
||||||
public LivingEntity getMythicMob() {
|
public LivingEntity getExternalMob() {
|
||||||
return mythicMob;
|
return externalMob;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param mythicMob
|
* @param externalMob
|
||||||
* the mythicMob to set
|
* the external mob to set
|
||||||
*/
|
*/
|
||||||
public void setMythicMob(LivingEntity mythicMob) {
|
public void setExternalMob(LivingEntity externalMob) {
|
||||||
this.mythicMob = mythicMob;
|
this.externalMob = externalMob;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the mythicMobs
|
* @return the externalMobs
|
||||||
*/
|
*/
|
||||||
public ArrayList<Entity> getMythicMobs() {
|
public List<Entity> getExternalMobs() {
|
||||||
return mythicMobs;
|
return externalMobs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param mythicMobs
|
* @param externalMob
|
||||||
* the mythicMobs to set
|
* the externalMob to add
|
||||||
*/
|
*/
|
||||||
public void setMythicMobs(ArrayList<Entity> mythicMobs) {
|
public void addExternalMob(Entity externalMob) {
|
||||||
this.mythicMobs = mythicMobs;
|
externalMobs.add(externalMob);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param externalMob
|
||||||
|
* the external mob to remove
|
||||||
|
*/
|
||||||
|
public void removeExternalMob(Entity externalMob) {
|
||||||
|
externalMobs.remove(externalMob);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -194,7 +206,7 @@ public class MythicMobsSign extends DSign implements MobSign {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String[] atributes = lines[2].split(",");
|
String[] atributes = lines[2].split(",");
|
||||||
if (atributes.length == 2) {
|
if (atributes.length == 2 || atributes.length == 3) {
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -205,19 +217,24 @@ public class MythicMobsSign extends DSign implements MobSign {
|
|||||||
@Override
|
@Override
|
||||||
public void onInit() {
|
public void onInit() {
|
||||||
String lines[] = getSign().getLines();
|
String lines[] = getSign().getLines();
|
||||||
if (lines[1].isEmpty() || lines[2].isEmpty()) {
|
|
||||||
} else {
|
String mob = lines[1];
|
||||||
String mob = lines[1];
|
if (mob != null) {
|
||||||
if (mob != null) {
|
String[] attributes = lines[2].split(",");
|
||||||
String[] attributes = lines[2].split(",");
|
if (attributes.length >= 2) {
|
||||||
if (attributes.length == 2) {
|
this.setMob(mob);
|
||||||
this.setMob(mob);
|
setMaxInterval(NumberUtil.parseInt(attributes[0]));
|
||||||
setMaxInterval(NumberUtil.parseInt(attributes[0]));
|
setAmount(NumberUtil.parseInt(attributes[1]));
|
||||||
setAmount(NumberUtil.parseInt(attributes[1]));
|
initialAmount = amount;
|
||||||
initialAmount = amount;
|
|
||||||
|
if (attributes.length == 3) {
|
||||||
|
provider = plugin.getExternalMobProviders().getByIdentifier(attributes[2]);
|
||||||
|
} else {
|
||||||
|
provider = ExternalMobPlugin.MYTHIC_MOBS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getSign().getBlock().setType(Material.AIR);
|
getSign().getBlock().setType(Material.AIR);
|
||||||
|
|
||||||
initialized = true;
|
initialized = true;
|
||||||
@ -256,13 +273,13 @@ public class MythicMobsSign extends DSign implements MobSign {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMythicMobs() {
|
public void setExternalMobs() {
|
||||||
for (Entity entity : spawnLocation.getChunk().getEntities()) {
|
for (Entity entity : spawnLocation.getChunk().getEntities()) {
|
||||||
if (entity.getLocation().getX() >= spawnLocation.getX() - 1 && entity.getLocation().getX() <= spawnLocation.getX() + 1 && entity.getLocation().getY() >= spawnLocation.getY() - 1
|
if (entity.getLocation().getX() >= spawnLocation.getX() - 1 && entity.getLocation().getX() <= spawnLocation.getX() + 1 && entity.getLocation().getY() >= spawnLocation.getY() - 1
|
||||||
&& entity.getLocation().getY() <= spawnLocation.getY() + 1 && entity.getLocation().getZ() >= spawnLocation.getZ() - 1 && entity.getLocation().getZ() <= spawnLocation.getZ() + 1
|
&& entity.getLocation().getY() <= spawnLocation.getY() + 1 && entity.getLocation().getZ() >= spawnLocation.getZ() - 1 && entity.getLocation().getZ() <= spawnLocation.getZ() + 1
|
||||||
&& !mythicMobs.contains(entity) && !(entity instanceof Player)) {
|
&& !externalMobs.contains(entity) && !(entity instanceof Player)) {
|
||||||
setMythicMob((LivingEntity) entity);
|
setExternalMob((LivingEntity) entity);
|
||||||
mythicMobs.add(entity);
|
externalMobs.add(entity);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -17,7 +17,8 @@
|
|||||||
package io.github.dre2n.dungeonsxl.task;
|
package io.github.dre2n.dungeonsxl.task;
|
||||||
|
|
||||||
import io.github.dre2n.dungeonsxl.mob.DMob;
|
import io.github.dre2n.dungeonsxl.mob.DMob;
|
||||||
import io.github.dre2n.dungeonsxl.sign.MythicMobsSign;
|
import io.github.dre2n.dungeonsxl.mob.ExternalMobProvider;
|
||||||
|
import io.github.dre2n.dungeonsxl.sign.ExternalMobSign;
|
||||||
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
@ -26,12 +27,14 @@ import org.bukkit.scheduler.BukkitRunnable;
|
|||||||
/**
|
/**
|
||||||
* @author Frank Baumann, Daniel Saukel
|
* @author Frank Baumann, Daniel Saukel
|
||||||
*/
|
*/
|
||||||
public class MythicMobSpawnTask extends BukkitRunnable {
|
public class ExternalMobSpawnTask extends BukkitRunnable {
|
||||||
|
|
||||||
private MythicMobsSign sign;
|
private ExternalMobSign sign;
|
||||||
|
private ExternalMobProvider provider;
|
||||||
|
|
||||||
public MythicMobSpawnTask(MythicMobsSign sign) {
|
public ExternalMobSpawnTask(ExternalMobSign sign, ExternalMobProvider provider) {
|
||||||
this.sign = sign;
|
this.sign = sign;
|
||||||
|
this.provider = provider;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -46,12 +49,12 @@ public class MythicMobSpawnTask extends BukkitRunnable {
|
|||||||
double y = sign.getSpawnLocation().getY();
|
double y = sign.getSpawnLocation().getY();
|
||||||
double z = sign.getSpawnLocation().getZ();
|
double z = sign.getSpawnLocation().getZ();
|
||||||
|
|
||||||
String command = "mythicmobs mobs spawn " + sign.getMob() + " 1 DXL_Game_" + gameWorld.getId() + "," + x + "," + y + "," + z;
|
String command = provider.getCommand(sign.getMob(), "DXL_Game_" + gameWorld.getId(), x, y, z);
|
||||||
Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), command);
|
Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), command);
|
||||||
|
|
||||||
sign.setMythicMobs();
|
sign.setExternalMobs();
|
||||||
if (sign.getMythicMob() != null) {
|
if (sign.getExternalMob() != null) {
|
||||||
new DMob(sign.getMythicMob(), sign.getGameWorld(), null, sign.getMob());
|
new DMob(sign.getExternalMob(), sign.getGameWorld(), null, sign.getMob());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the amount
|
// Set the amount
|
@ -4,7 +4,7 @@ version: ${project.version}
|
|||||||
authors: [Frank Baumann, Milan Albrecht, Tobias Schmitz, Daniel Saukel]
|
authors: [Frank Baumann, Milan Albrecht, Tobias Schmitz, Daniel Saukel]
|
||||||
description: ${project.description}
|
description: ${project.description}
|
||||||
website: ${project.url}
|
website: ${project.url}
|
||||||
softdepend: [BlueRoseCommons, CommandsXL, Vault, MythicMobs]
|
softdepend: [BlueRoseCommons, CommandsXL, Vault, CustomMobs, InsaneMobs, MythicMobs]
|
||||||
commands:
|
commands:
|
||||||
dungeonsxl:
|
dungeonsxl:
|
||||||
description: Reference command for DungeonsXL.
|
description: Reference command for DungeonsXL.
|
||||||
|
Loading…
Reference in New Issue
Block a user