Release 2.1
- Prevent Drops of Killed Mobs - Prevent Minecart-Drops (when TrainCarts is installed)
This commit is contained in:
parent
8e3b771d61
commit
65a50d30c0
7 changed files with 112 additions and 18 deletions
4
pom.xml
4
pom.xml
|
@ -3,12 +3,12 @@
|
|||
<groupId>de.jaschastarke</groupId>
|
||||
<artifactId>LimitedCreative</artifactId>
|
||||
<name>LimitedCreative</name>
|
||||
<version>2.1-SNAPSHOT</version>
|
||||
<version>2.1</version>
|
||||
<url>https://github.com/possi/LimitedCreative</url>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<plib.version>1.3-SNAPSHOT</plib.version>
|
||||
<plib.version>1.3</plib.version>
|
||||
</properties>
|
||||
|
||||
<scm>
|
||||
|
|
|
@ -1,21 +1,19 @@
|
|||
package de.jaschastarke.minecraft.limitedcreative;
|
||||
|
||||
import java.util.WeakHashMap;
|
||||
|
||||
import org.bukkit.entity.Entity;
|
||||
|
||||
import de.jaschastarke.bukkit.lib.CoreModule;
|
||||
import de.jaschastarke.bukkit.lib.modules.AdditionalBlockBreaks;
|
||||
import de.jaschastarke.minecraft.limitedcreative.limits.BlockListener;
|
||||
import de.jaschastarke.minecraft.limitedcreative.limits.EntityListener;
|
||||
import de.jaschastarke.minecraft.limitedcreative.limits.EntityNoDrop;
|
||||
import de.jaschastarke.minecraft.limitedcreative.limits.LimitConfig;
|
||||
import de.jaschastarke.minecraft.limitedcreative.limits.PlayerListener;
|
||||
import de.jaschastarke.minecraft.limitedcreative.limits.VehicleListener;
|
||||
import de.jaschastarke.modularize.IModule;
|
||||
import de.jaschastarke.modularize.ModuleEntry;
|
||||
|
||||
public class ModCreativeLimits extends CoreModule<LimitedCreative> {
|
||||
protected LimitConfig config;
|
||||
private WeakHashMap<Entity, Void> no_xp_mobs = new WeakHashMap<Entity, Void>();
|
||||
private EntityNoDrop noDropsMobs = null;
|
||||
|
||||
public ModCreativeLimits(LimitedCreative plugin) {
|
||||
super(plugin);
|
||||
|
@ -34,6 +32,7 @@ public class ModCreativeLimits extends CoreModule<LimitedCreative> {
|
|||
listeners.addListener(new PlayerListener(this));
|
||||
listeners.addListener(new EntityListener(this));
|
||||
listeners.addListener(new BlockListener(this));
|
||||
listeners.addListener(new VehicleListener(this));
|
||||
config = plugin.getPluginConfig().registerSection(new LimitConfig(this, entry));
|
||||
|
||||
blockDrops = modules.linkSharedModule(FeatureBlockItemSpawn.class, plugin.getModules());
|
||||
|
@ -54,8 +53,10 @@ public class ModCreativeLimits extends CoreModule<LimitedCreative> {
|
|||
return config;
|
||||
}
|
||||
|
||||
public WeakHashMap<Entity, Void> getNoXPMobs() {
|
||||
return no_xp_mobs;
|
||||
public EntityNoDrop getNoDropMobs() {
|
||||
if (noDropsMobs == null)
|
||||
noDropsMobs = new EntityNoDrop();
|
||||
return noDropsMobs;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -70,10 +70,10 @@ public class BlockStateConfig extends Configuration implements IConfigurationSub
|
|||
/**
|
||||
* BlockStateEnabled
|
||||
*
|
||||
* This experimental Feature stores the GameMode a Block was created in, and prevents drops if a Block was created
|
||||
* This Feature stores the GameMode a Block was created in, and prevents drops if a Block was created
|
||||
* in creative mode.
|
||||
*
|
||||
* Due to the Experimental state this Feature isn't enabled by default. It uses the Database-credentials from
|
||||
* Due to the huge load of this Feature, it isn't enabled by default. It uses the Database-credentials from
|
||||
* bukkit.yml (http://wiki.bukkit.org/Bukkit.yml#database) in the server-directory.
|
||||
*
|
||||
* default: false
|
||||
|
@ -86,9 +86,9 @@ public class BlockStateConfig extends Configuration implements IConfigurationSub
|
|||
/**
|
||||
* BlockStateThreading
|
||||
*
|
||||
* This experimental variant of the experimental Feature uses Threading to minimize lag. This fully relies on
|
||||
* Bukkit metadata implementation. You only should need this, if there are often plays more then 10 players at once
|
||||
* on your server. Be aware that this requires more memory.
|
||||
* Uses Threading to minimize lag. This fully relies on Bukkit metadata implementation. You only should need this,
|
||||
* if there are often plays more then 10 players at once on your server. Be aware that this requires more memory,
|
||||
* to increase the performance
|
||||
*
|
||||
* default: false
|
||||
*/
|
||||
|
|
|
@ -54,11 +54,15 @@ public class EntityListener implements Listener {
|
|||
@EventHandler
|
||||
public void onEntityDeath(EntityDeathEvent event) {
|
||||
if (event.getEntity() instanceof LivingEntity && event.getDroppedExp() > 0) {
|
||||
if (mod.getNoXPMobs().containsKey(event.getEntity())) {
|
||||
if (mod.getNoDropMobs().isXPPrevented(event.getEntity())) {
|
||||
event.setDroppedExp(0);
|
||||
mod.getNoXPMobs().remove(event.getEntity());
|
||||
event.getDrops().clear();
|
||||
}
|
||||
}
|
||||
if (event.getDrops().size() > 0 && mod.getNoDropMobs().isDropPrevented(event.getEntity())) {
|
||||
event.getDrops().clear();
|
||||
}
|
||||
mod.getNoDropMobs().remove(event.getEntity());
|
||||
}
|
||||
|
||||
private boolean checkPermission(Player player, IAbstractPermission perm) {
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
package de.jaschastarke.minecraft.limitedcreative.limits;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.WeakHashMap;
|
||||
|
||||
import org.bukkit.entity.Entity;
|
||||
|
||||
public class EntityNoDrop {
|
||||
private Map<Entity, Prevent> nodrop = new WeakHashMap<Entity, Prevent>();
|
||||
|
||||
private Prevent get(Entity entity) {
|
||||
if (!nodrop.containsKey(entity))
|
||||
nodrop.put(entity, new Prevent());
|
||||
return nodrop.get(entity);
|
||||
}
|
||||
|
||||
public void preventXP(Entity entity) {
|
||||
get(entity).xp = true;
|
||||
}
|
||||
public void preventDrop(Entity entity) {
|
||||
get(entity).drops = true;
|
||||
}
|
||||
public boolean isXPPrevented(Entity entity) {
|
||||
return nodrop.containsKey(entity) && nodrop.get(entity).xp;
|
||||
}
|
||||
public boolean isDropPrevented(Entity entity) {
|
||||
return nodrop.containsKey(entity) && nodrop.get(entity).drops;
|
||||
}
|
||||
public void remove(Entity entity) {
|
||||
nodrop.remove(entity);
|
||||
}
|
||||
|
||||
private class Prevent {
|
||||
boolean xp = false;
|
||||
boolean drops = false;
|
||||
}
|
||||
}
|
|
@ -218,7 +218,7 @@ public class PlayerListener implements Listener {
|
|||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onEntityDamageByEntity(EntityDamageEvent rawevent) {
|
||||
if (rawevent instanceof EntityDamageByEntityEvent && !rawevent.isCancelled()) {
|
||||
EntityDamageByEntityEvent event = (EntityDamageByEntityEvent) rawevent;
|
||||
|
@ -240,7 +240,12 @@ public class PlayerListener implements Listener {
|
|||
}
|
||||
} else if (event.getEntity() instanceof LivingEntity) {
|
||||
if (!checkPermission(player, NoLimitPermissions.STATS_XP)) {
|
||||
mod.getNoXPMobs().put(event.getEntity(), null);
|
||||
mod.getNoDropMobs().preventXP(event.getEntity());
|
||||
}
|
||||
}
|
||||
if (!event.isCancelled()) {
|
||||
if (!checkPermission(player, NoLimitPermissions.DROP)) {
|
||||
mod.getNoDropMobs().preventDrop(event.getEntity());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
package de.jaschastarke.minecraft.limitedcreative.limits;
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.vehicle.VehicleDestroyEvent;
|
||||
|
||||
import de.jaschastarke.minecraft.limitedcreative.ModCreativeLimits;
|
||||
|
||||
public class VehicleListener implements Listener {
|
||||
private ModCreativeLimits mod;
|
||||
public VehicleListener(ModCreativeLimits mod) {
|
||||
this.mod = mod;
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onVehicleDestroy(VehicleDestroyEvent event) {
|
||||
if (event.getAttacker() instanceof Player) {
|
||||
Player player = (Player) event.getAttacker();
|
||||
if (player.getGameMode() == GameMode.CREATIVE && !mod.getPlugin().getPermManager().hasPermission(player, NoLimitPermissions.DROP)) {
|
||||
switch (event.getVehicle().getType()) {
|
||||
case MINECART:
|
||||
mod.getBlockSpawn().block(event.getVehicle().getLocation().getBlock().getLocation(), Material.MINECART);
|
||||
break;
|
||||
case MINECART_CHEST:
|
||||
mod.getBlockSpawn().block(event.getVehicle().getLocation().getBlock().getLocation(), Material.STORAGE_MINECART);
|
||||
break;
|
||||
case MINECART_FURNACE:
|
||||
mod.getBlockSpawn().block(event.getVehicle().getLocation().getBlock().getLocation(), Material.POWERED_MINECART);
|
||||
break;
|
||||
case MINECART_HOPPER:
|
||||
mod.getBlockSpawn().block(event.getVehicle().getLocation().getBlock().getLocation(), Material.HOPPER_MINECART);
|
||||
break;
|
||||
case MINECART_TNT:
|
||||
mod.getBlockSpawn().block(event.getVehicle().getLocation().getBlock().getLocation(), Material.EXPLOSIVE_MINECART);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue