Skip to content

Commit b6485a5

Browse files
Initial commit
0 parents  commit b6485a5

File tree

5 files changed

+317
-0
lines changed

5 files changed

+317
-0
lines changed

Creative Block.iml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
3+
<component name="FacetManager">
4+
<facet type="minecraft" name="Minecraft">
5+
<configuration>
6+
<autoDetectTypes>
7+
<platformType>SPIGOT</platformType>
8+
</autoDetectTypes>
9+
</configuration>
10+
</facet>
11+
</component>
12+
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
13+
<output url="file://$MODULE_DIR$/target/classes" />
14+
<output-test url="file://$MODULE_DIR$/target/test-classes" />
15+
<content url="file://$MODULE_DIR$">
16+
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
17+
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
18+
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
19+
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
20+
<excludeFolder url="file://$MODULE_DIR$/target" />
21+
</content>
22+
<orderEntry type="inheritedJdk" />
23+
<orderEntry type="sourceFolder" forTests="false" />
24+
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spigotmc:spigot-api:1.13.2-R0.1-SNAPSHOT" level="project" />
25+
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-lang:commons-lang:2.6" level="project" />
26+
<orderEntry type="library" scope="PROVIDED" name="Maven: com.googlecode.json-simple:json-simple:1.1.1" level="project" />
27+
<orderEntry type="library" scope="PROVIDED" name="Maven: junit:junit:4.10" level="project" />
28+
<orderEntry type="library" scope="PROVIDED" name="Maven: org.hamcrest:hamcrest-core:1.1" level="project" />
29+
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.guava:guava:21.0" level="project" />
30+
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.gson:gson:2.8.0" level="project" />
31+
<orderEntry type="library" scope="PROVIDED" name="Maven: net.md-5:bungeecord-chat:1.13-SNAPSHOT" level="project" />
32+
<orderEntry type="library" scope="PROVIDED" name="Maven: org.yaml:snakeyaml:1.23" level="project" />
33+
</component>
34+
</module>

pom.xml

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<groupId>me.ShakeforProtein</groupId>
8+
<artifactId>CreativeBlock</artifactId>
9+
<version>0.1.1</version>
10+
<packaging>jar</packaging>
11+
12+
<name>CreativeBlock</name>
13+
14+
<properties>
15+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
16+
</properties>
17+
18+
<build>
19+
<defaultGoal>clean package</defaultGoal>
20+
<plugins>
21+
<plugin>
22+
<groupId>org.apache.maven.plugins</groupId>
23+
<artifactId>maven-compiler-plugin</artifactId>
24+
<version>3.7.0</version>
25+
<configuration>
26+
<source>1.8</source>
27+
<target>1.8</target>
28+
</configuration>
29+
</plugin>
30+
<plugin>
31+
<groupId>org.apache.maven.plugins</groupId>
32+
<artifactId>maven-shade-plugin</artifactId>
33+
<version>3.1.0</version>
34+
<executions>
35+
<execution>
36+
<phase>package</phase>
37+
<goals>
38+
<goal>shade</goal>
39+
</goals>
40+
<configuration>
41+
<createDependencyReducedPom>false</createDependencyReducedPom>
42+
</configuration>
43+
</execution>
44+
</executions>
45+
</plugin>
46+
</plugins>
47+
<resources>
48+
<resource>
49+
<directory>src/main/resources</directory>
50+
<filtering>true</filtering>
51+
</resource>
52+
</resources>
53+
</build>
54+
55+
<repositories>
56+
<repository>
57+
<id>spigotmc-repo</id>
58+
<url>https://hub.spigotmc.org/nexus/content/groups/public/</url>
59+
</repository>
60+
<repository>
61+
<id>sonatype</id>
62+
<url>https://oss.sonatype.org/content/groups/public/</url>
63+
</repository>
64+
</repositories>
65+
66+
<dependencies>
67+
<dependency>
68+
<groupId>org.spigotmc</groupId>
69+
<artifactId>spigot-api</artifactId>
70+
<version>1.13.2-R0.1-SNAPSHOT</version>
71+
<scope>provided</scope>
72+
</dependency>
73+
</dependencies>
74+
</project>
Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
package me.shakeforprotein.creativeblock;
2+
3+
import org.bukkit.*;
4+
import org.bukkit.enchantments.Enchantment;
5+
import org.bukkit.event.EventHandler;
6+
import org.bukkit.event.Listener;
7+
import org.bukkit.event.player.PlayerInteractEvent;
8+
import org.bukkit.event.player.PlayerItemHeldEvent;
9+
import org.bukkit.inventory.ItemStack;
10+
import org.bukkit.inventory.meta.ItemMeta;
11+
import org.bukkit.plugin.java.JavaPlugin;
12+
13+
import java.util.HashMap;
14+
15+
public final class CreativeBlock extends JavaPlugin implements Listener {
16+
17+
private String badge = ChatColor.translateAlternateColorCodes('&', getConfig().getString("badge"));
18+
private String err = ChatColor.translateAlternateColorCodes('&', getConfig().getString("error"));
19+
private boolean useConfigLevels = getConfig().getBoolean("useConfigLevels");
20+
21+
@Override
22+
public void onEnable() {
23+
getConfig().options().copyDefaults(true);
24+
getConfig().set("version", this.getDescription().getVersion());
25+
Bukkit.getPluginManager().registerEvents(this, this);
26+
if (getConfig().getBoolean("newConfig") || getConfig().getString("newConfig") == null) {
27+
for (Enchantment ench : Enchantment.values()) {
28+
getConfig().set("enchantments." + ench.getKey(), ench.getMaxLevel());
29+
}
30+
getConfig().set("newConfig", false);
31+
}
32+
saveConfig();
33+
}
34+
35+
@Override
36+
public void onDisable() {
37+
}
38+
39+
@EventHandler
40+
public void playerInteractEvent(PlayerInteractEvent event) {
41+
if (event.getItem() != null) {
42+
ItemStack heldItem = event.getItem();
43+
44+
if (!event.getPlayer().isOp() && !event.getPlayer().hasPermission("creativeblock.bypass")) {
45+
World world = event.getPlayer().getWorld();
46+
boolean active = false;
47+
for (String listItem : getConfig().getStringList("ActiveWorlds")) {
48+
if (world.getName().equalsIgnoreCase(listItem)) {
49+
active = true;
50+
}
51+
}
52+
53+
if (heldItem.hasItemMeta()) {
54+
ItemMeta itemMeta = heldItem.getItemMeta();
55+
if (itemMeta.hasDisplayName() && getConfig().getBoolean("blockColouredItems")) {
56+
if (!itemMeta.getDisplayName().equals(ChatColor.stripColor(itemMeta.getDisplayName()))) {
57+
event.getPlayer().sendMessage(badge + err + getConfig().getString("messages.colouredItem"));
58+
itemMeta.setDisplayName(null);
59+
heldItem.setItemMeta(itemMeta);
60+
event.setCancelled(true);
61+
if (getConfig().getBoolean("verbose")) {
62+
getLogger().info("Player '" + event.getPlayer().getName() + "' with UUID '" + event.getPlayer().getUniqueId() + "' attempted to use an item with coloured name '" + itemMeta.getDisplayName());
63+
}
64+
if (getConfig().getBoolean("destroyItems")) {
65+
heldItem.setType(Material.AIR);
66+
}
67+
}
68+
}
69+
70+
if (itemMeta.hasEnchants() && getConfig().getBoolean("blockUnsafeEnchantments")) {
71+
HashMap<Enchantment, Integer> enchHash = new HashMap<>();
72+
for (Enchantment ench : itemMeta.getEnchants().keySet()) {
73+
if (itemMeta.getEnchantLevel(ench) > getConfig().getInt("enchantments." + ench.getKey())) {
74+
enchHash.putIfAbsent(ench, itemMeta.getEnchantLevel(ench));
75+
}
76+
}
77+
if (!enchHash.isEmpty()) {
78+
event.getPlayer().sendMessage(badge + err + getConfig().getString("messages.unsafeEnchants"));
79+
for (Enchantment ench : enchHash.keySet()) {
80+
itemMeta.removeEnchant(ench);
81+
itemMeta.addEnchant(ench, getConfig().getInt("enchantments." + ench.getKey()), false);
82+
}
83+
heldItem.setItemMeta(itemMeta);
84+
event.setCancelled(true);
85+
if (getConfig().getBoolean("verbose")) {
86+
getLogger().info("Player '" + event.getPlayer().getName() + "' with UUID '" + event.getPlayer().getUniqueId() + "' attempted to use an item with unsafe Enchantments '" + enchHash.toString());
87+
}
88+
89+
if (getConfig().getBoolean("destroyItems")) {
90+
heldItem.setType(Material.AIR);
91+
}
92+
}
93+
94+
}
95+
}
96+
}
97+
}
98+
}
99+
100+
@EventHandler
101+
private void playerHoldItem(PlayerItemHeldEvent event) {
102+
int i;
103+
HashMap itemHash = new HashMap<Integer, ItemStack>();
104+
105+
ItemStack air = new ItemStack(Material.AIR);
106+
if(event.getPlayer().getInventory().getItemInMainHand() != null){
107+
itemHash.putIfAbsent(0, event.getPlayer().getInventory().getItemInMainHand());
108+
}
109+
else{
110+
itemHash.putIfAbsent(0, air);
111+
}
112+
if(event.getPlayer().getInventory().getItemInOffHand() != null) {
113+
itemHash.putIfAbsent(1, event.getPlayer().getInventory().getItemInOffHand());
114+
}
115+
else{
116+
itemHash.putIfAbsent(0, air);
117+
}
118+
119+
for (i = 0; i < 2; i++) {
120+
ItemStack heldItem = (ItemStack) itemHash.get(i);
121+
122+
if (!event.getPlayer().isOp() && !event.getPlayer().hasPermission("creativeblock.bypass")) {
123+
World world = event.getPlayer().getWorld();
124+
boolean active = false;
125+
for (String listItem : getConfig().getStringList("ActiveWorlds")) {
126+
if (world.getName().equalsIgnoreCase(listItem)) {
127+
active = true;
128+
}
129+
}
130+
131+
if (heldItem.hasItemMeta()) {
132+
ItemMeta itemMeta = heldItem.getItemMeta();
133+
if (itemMeta.hasDisplayName() && getConfig().getBoolean("blockColouredItems")) {
134+
if (!itemMeta.getDisplayName().equals(ChatColor.stripColor(itemMeta.getDisplayName()))) {
135+
event.getPlayer().sendMessage(badge + err + getConfig().getString("messages.colouredItem"));
136+
itemMeta.setDisplayName(null);
137+
heldItem.setItemMeta(itemMeta);
138+
event.setCancelled(true);
139+
if (getConfig().getBoolean("verbose")) {
140+
getLogger().info("Player '" + event.getPlayer().getName() + "' with UUID '" + event.getPlayer().getUniqueId() + "' attempted to use an item with coloured name '" + itemMeta.getDisplayName());
141+
}
142+
if (getConfig().getBoolean("destroyItems")) {
143+
heldItem.setType(Material.AIR);
144+
}
145+
}
146+
}
147+
148+
if (itemMeta.hasEnchants() && getConfig().getBoolean("blockUnsafeEnchantments")) {
149+
HashMap<Enchantment, Integer> enchHash = new HashMap<>();
150+
for (Enchantment ench : itemMeta.getEnchants().keySet()) {
151+
if (itemMeta.getEnchantLevel(ench) > getConfig().getInt("enchantments." + ench.getKey())) {
152+
enchHash.putIfAbsent(ench, itemMeta.getEnchantLevel(ench));
153+
}
154+
}
155+
if (!enchHash.isEmpty()) {
156+
event.getPlayer().sendMessage(badge + err + getConfig().getString("messages.unsafeEnchants"));
157+
for (Enchantment ench : enchHash.keySet()) {
158+
itemMeta.removeEnchant(ench);
159+
itemMeta.addEnchant(ench, getConfig().getInt("enchantments." + ench.getKey()), false);
160+
}
161+
heldItem.setItemMeta(itemMeta);
162+
event.setCancelled(true);
163+
if (getConfig().getBoolean("verbose")) {
164+
getLogger().info("Player '" + event.getPlayer().getName() + "' with UUID '" + event.getPlayer().getUniqueId() + "' attempted to use an item with unsafe Enchantments '" + enchHash.toString());
165+
}
166+
167+
if (getConfig().getBoolean("destroyItems")) {
168+
heldItem.setType(Material.AIR);
169+
}
170+
}
171+
}
172+
}
173+
}
174+
}
175+
}
176+
}
177+
178+

src/main/resources/config.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
blockColouredItems: true
2+
blockUnsafeEnchantments: true
3+
verbose: true
4+
destroyItems: false
5+
newConfig: true
6+
7+
badge: "&6[Creative Block]&r"
8+
error: " &cError:&r"
9+
10+
ActiveWorlds:
11+
- Creative
12+
- Creatuve_The_End
13+
- Creative_Nether
14+
- Survival14Test
15+
16+
useConfigLevels: true
17+
maxEnchantLevel: 50
18+
19+
messages:
20+
colouredItem: "This server does not allow the use of items with a coloured name."
21+
unsafeEnchants: "This server does not allow items with enchantments above the maximum 'safe' levels set by Mojang"

src/main/resources/plugin.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
name: CreativeBlock
2+
version: ${project.version}
3+
main: me.shakeforprotein.creativeblock.CreativeBlock
4+
api-version: 1.13
5+
authors: [ShakeforProtein]
6+
7+
permissions:
8+
creativeblock.bypass:
9+
default: false
10+
description: Allows player to have blocked items.

0 commit comments

Comments
 (0)