Skip to content

Commit

Permalink
add carpet dupe prevention
Browse files Browse the repository at this point in the history
  • Loading branch information
xGinko committed Jan 9, 2025
1 parent 9863159 commit 1885f4b
Show file tree
Hide file tree
Showing 3 changed files with 150 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package me.xginko.aef.modules.dupepreventions;

import com.cryptomorin.xseries.XMaterial;
import me.xginko.aef.modules.AEFModule;
import me.xginko.aef.utils.MaterialUtil;
import org.bukkit.block.Block;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPistonEvent;
import org.bukkit.event.block.BlockPistonExtendEvent;
import org.bukkit.event.block.BlockPistonRetractEvent;

import java.util.ArrayList;
import java.util.List;

public class CarpetDupe extends AEFModule implements Listener {

private final boolean deleteCarpet;

public CarpetDupe() {
super("dupe-preventions.carpet-dupe", false,
"Will prevent Pistons that are pusing carpets from working.");
this.deleteCarpet = config.getBoolean(configPath + ".delete-carpet", true);
}

@Override
public void enable() {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}

@Override
public void disable() {
HandlerList.unregisterAll(this);
}

@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
private void onPistonExtend(BlockPistonExtendEvent event) {
onPistonEvent(event, event.getBlocks());
}

@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
private void onPistonRetract(BlockPistonRetractEvent event) {
onPistonEvent(event, event.getBlocks());
}

private void onPistonEvent(BlockPistonEvent event, List<Block> affectedBlocks) {
if (affectedBlocks.isEmpty()) return;

List<Block> carpets = new ArrayList<>(8);

for (Block block : affectedBlocks) {
if (MaterialUtil.CARPETS.contains(block.getType())) {
carpets.add(block);
}
}

if (carpets.isEmpty()) {
return;
}

event.setCancelled(true);

if (deleteCarpet) {
for (Block block : carpets) {
plugin.getServer().getGlobalRegionScheduler()
.execute(plugin, () -> block.setType(XMaterial.AIR.get(), false));
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package me.xginko.aef.modules.dupepreventions;

import com.cryptomorin.xseries.XMaterial;
import me.xginko.aef.modules.AEFModule;
import me.xginko.aef.utils.MaterialUtil;
import org.bukkit.block.Block;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPistonEvent;
import org.bukkit.event.block.BlockPistonExtendEvent;
import org.bukkit.event.block.BlockPistonRetractEvent;

import java.util.ArrayList;
import java.util.List;

public class CarpetDupe extends AEFModule implements Listener {

private final boolean deleteCarpet;

public CarpetDupe() {
super("dupe-preventions.carpet-dupe", false,
"Will prevent Pistons that are pusing carpets from working.");
this.deleteCarpet = config.getBoolean(configPath + ".delete-carpet", true);
}

@Override
public void enable() {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}

@Override
public void disable() {
HandlerList.unregisterAll(this);
}

@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
private void onPistonExtend(BlockPistonExtendEvent event) {
onPistonEvent(event, event.getBlocks());
}

@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
private void onPistonRetract(BlockPistonRetractEvent event) {
onPistonEvent(event, event.getBlocks());
}

private void onPistonEvent(BlockPistonEvent event, List<Block> affectedBlocks) {
if (affectedBlocks.isEmpty()) return;

List<Block> carpets = new ArrayList<>(8);

for (Block block : affectedBlocks) {
if (MaterialUtil.CARPETS.contains(block.getType())) {
carpets.add(block);
}
}

if (carpets.isEmpty()) {
return;
}

event.setCancelled(true);

if (deleteCarpet) {
plugin.getServer().getScheduler().runTaskLater(plugin, () -> {
for (Block block : carpets) {
block.setType(XMaterial.AIR.get(), false);
}
}, 1L);
}
}
}
5 changes: 5 additions & 0 deletions shared/src/main/java/me/xginko/aef/utils/MaterialUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,11 @@ public final class MaterialUtil {
.map(XMaterial::get)
.collect(Collectors.toCollection(() -> EnumSet.noneOf(Material.class)));

public static final Set<Material> CARPETS = XTag.CARPETS.getValues().stream()
.filter(XMaterial::isSupported)
.map(XMaterial::get)
.collect(Collectors.toCollection(() -> EnumSet.noneOf(Material.class)));

public static final Set<Material> SIGNS = XTag.SIGNS.getValues().stream()
.filter(XMaterial::isSupported)
.map(XMaterial::get)
Expand Down

0 comments on commit 1885f4b

Please sign in to comment.