some metadata implementation for blocking drops of creative placed
blocks
This commit is contained in:
parent
69786772f7
commit
ba44d72609
6 changed files with 198 additions and 3 deletions
|
@ -121,6 +121,9 @@ limit:
|
||||||
break:
|
break:
|
||||||
- bedrock
|
- bedrock
|
||||||
|
|
||||||
|
blocks:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
region:
|
region:
|
||||||
# RegionsEnabled
|
# RegionsEnabled
|
||||||
# Enables the Feature for "creative-regions". This Feature is automatically disabled, if the required plugin
|
# Enables the Feature for "creative-regions". This Feature is automatically disabled, if the required plugin
|
||||||
|
|
|
@ -25,8 +25,10 @@ import org.bukkit.plugin.PluginDescriptionFile;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
import de.jaschastarke.minecraft.integration.Communicator;
|
import de.jaschastarke.minecraft.integration.Communicator;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.listeners.CreativeBlockListener;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.listeners.GenericListener;
|
||||||
import de.jaschastarke.minecraft.limitedcreative.listeners.LimitListener;
|
import de.jaschastarke.minecraft.limitedcreative.listeners.LimitListener;
|
||||||
import de.jaschastarke.minecraft.limitedcreative.listeners.MainListener;
|
import de.jaschastarke.minecraft.limitedcreative.listeners.InventoryStoreListener;
|
||||||
import de.jaschastarke.minecraft.limitedcreative.regions.WorldGuardIntegration;
|
import de.jaschastarke.minecraft.limitedcreative.regions.WorldGuardIntegration;
|
||||||
import de.jaschastarke.minecraft.utils.Locale;
|
import de.jaschastarke.minecraft.utils.Locale;
|
||||||
import de.jaschastarke.minecraft.utils.Permissions;
|
import de.jaschastarke.minecraft.utils.Permissions;
|
||||||
|
@ -73,7 +75,9 @@ public class Core extends JavaPlugin {
|
||||||
warn(L("basic.conflict", "MultiInv", L("basic.feature.store")));
|
warn(L("basic.conflict", "MultiInv", L("basic.feature.store")));
|
||||||
config.setTempStoreEnabled(false);
|
config.setTempStoreEnabled(false);
|
||||||
}
|
}
|
||||||
getServer().getPluginManager().registerEvents(new MainListener(this), this);
|
getServer().getPluginManager().registerEvents(new InventoryStoreListener(this), this);
|
||||||
|
getServer().getPluginManager().registerEvents(new GenericListener(this), this);
|
||||||
|
getServer().getPluginManager().registerEvents(new CreativeBlockListener(this), this);
|
||||||
|
|
||||||
// 2nd Feature: Creative Limitations (Restrictions)
|
// 2nd Feature: Creative Limitations (Restrictions)
|
||||||
if (config.getLimitEnabled())
|
if (config.getLimitEnabled())
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
/*
|
||||||
|
* Limited Creative - (Bukkit Plugin)
|
||||||
|
* Copyright (C) 2012 jascha@ja-s.de
|
||||||
|
*
|
||||||
|
* 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 de.jaschastarke.minecraft.limitedcreative.listeners;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.GameMode;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
|
import org.bukkit.metadata.MetadataValue;
|
||||||
|
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.Core;
|
||||||
|
|
||||||
|
public class CreativeBlockListener implements Listener {
|
||||||
|
private Core plugin;
|
||||||
|
public CreativeBlockListener(Core plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(ignoreCancelled=true)
|
||||||
|
public void onBlockBreak(BlockBreakEvent event) {
|
||||||
|
if (event.getPlayer().getGameMode() != GameMode.CREATIVE) {
|
||||||
|
if (event.getBlock().hasMetadata("created_gamemode")) {
|
||||||
|
List<MetadataValue> metadata = event.getBlock().getMetadata("created_gamemode");
|
||||||
|
for (MetadataValue m : metadata) {
|
||||||
|
if (m.getOwningPlugin().equals(plugin)) {
|
||||||
|
if (GameMode.valueOf(m.asString()) == GameMode.CREATIVE) {
|
||||||
|
plugin.spawnblock.block(event.getBlock());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority=EventPriority.MONITOR, ignoreCancelled=true)
|
||||||
|
public void onBlockPlace(BlockPlaceEvent event) {
|
||||||
|
MetadataValue test = new FixedMetadataValue(plugin, event.getPlayer().getGameMode().name());
|
||||||
|
Core.debug("test: " + test.value().toString() + " - " + test.asString());
|
||||||
|
|
||||||
|
event.getBlock().setMetadata("created_by", new FixedMetadataValue(plugin, event.getPlayer().getName()));
|
||||||
|
event.getBlock().setMetadata("created_gamemode", new FixedMetadataValue(plugin, event.getPlayer().getGameMode().name()));
|
||||||
|
event.getBlock().setMetadata("created_at", new FixedMetadataValue(plugin, System.currentTimeMillis()));
|
||||||
|
|
||||||
|
Core.debug(event.getBlock() + ": metadata created_gamemode: " + event.getBlock().getMetadata("created_gamemode").get(0).value().toString());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,68 @@
|
||||||
|
/*
|
||||||
|
* Limited Creative - (Bukkit Plugin)
|
||||||
|
* Copyright (C) 2012 jascha@ja-s.de
|
||||||
|
*
|
||||||
|
* 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 de.jaschastarke.minecraft.limitedcreative.listeners;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Item;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.entity.ItemSpawnEvent;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.Core;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.Players;
|
||||||
|
|
||||||
|
public class GenericListener implements Listener {
|
||||||
|
private Core plugin;
|
||||||
|
public GenericListener(Core plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Needed by 3 of 4 features.
|
||||||
|
* - Creative Limits
|
||||||
|
* - Creative Blocks in Survival
|
||||||
|
* - Regions
|
||||||
|
*/
|
||||||
|
@EventHandler
|
||||||
|
public void onItemSpawn(ItemSpawnEvent event) {
|
||||||
|
if (event.isCancelled())
|
||||||
|
return;
|
||||||
|
if (event.getEntity() instanceof Item) {
|
||||||
|
if (plugin.spawnblock.isBlocked(event.getLocation().getBlock().getLocation(), ((Item) event.getEntity()).getItemStack().getType())) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onLogout(PlayerQuitEvent event) {
|
||||||
|
// what? i can't cancel a logout event? but how to chain the user to the server than? xD
|
||||||
|
Players.remove(event.getPlayer().getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The isCancelled in PlayerInteractEvent doesn't check useItemInHand, even this decides (when clicking on
|
||||||
|
* entity with e.g. a bucket)
|
||||||
|
* @param event
|
||||||
|
* @return The relevant "isCancelled"
|
||||||
|
*/
|
||||||
|
public static boolean isCancelled(PlayerInteractEvent event) {
|
||||||
|
return event.useInteractedBlock() == Event.Result.DENY && event.useItemInHand() == Event.Result.DENY;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*
|
||||||
|
* Limited Creative - (Bukkit Plugin)
|
||||||
|
* Copyright (C) 2012 jascha@ja-s.de
|
||||||
|
*
|
||||||
|
* 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 de.jaschastarke.minecraft.limitedcreative.listeners;
|
||||||
|
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.player.PlayerGameModeChangeEvent;
|
||||||
|
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||||
|
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.Core;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.Players;
|
||||||
|
|
||||||
|
public class InventoryStoreListener implements Listener {
|
||||||
|
private Core plugin;
|
||||||
|
public InventoryStoreListener(Core plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onPlayerGameModeChange(PlayerGameModeChangeEvent event) {
|
||||||
|
if (Core.isDebug()) {
|
||||||
|
Core.debug("onPlayerGameModeChange: "+event.getPlayer().getName());
|
||||||
|
Core.debug("Current GameMode: "+event.getPlayer().getGameMode());
|
||||||
|
Core.debug("New GameMode: "+event.getNewGameMode());
|
||||||
|
Core.debug("isLoggedin: "+plugin.com.isLoggedIn(event.getPlayer()));
|
||||||
|
Core.debug("isCancelled: "+event.isCancelled());
|
||||||
|
}
|
||||||
|
if (!plugin.com.isLoggedIn(event.getPlayer()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!Players.get(event.getPlayer()).onSetGameMode(event.getNewGameMode()))
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
@EventHandler
|
||||||
|
public void onPlayerRespawn(PlayerRespawnEvent event) {
|
||||||
|
Players.get(event.getPlayer()).onRevive();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -72,7 +72,7 @@ public class LimitListener implements Listener {
|
||||||
|
|
||||||
@EventHandler(priority=EventPriority.LOWEST)
|
@EventHandler(priority=EventPriority.LOWEST)
|
||||||
public void onPlayerInteract(PlayerInteractEvent event) {
|
public void onPlayerInteract(PlayerInteractEvent event) {
|
||||||
if (MainListener.isCancelled(event) || event.getPlayer().getGameMode() != GameMode.CREATIVE)
|
if (GenericListener.isCancelled(event) || event.getPlayer().getGameMode() != GameMode.CREATIVE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
LCPlayer player = Players.get(event.getPlayer());
|
LCPlayer player = Players.get(event.getPlayer());
|
||||||
|
|
Loading…
Reference in a new issue