feat: add dirt to mud in cauldron; fix: filter not working in 1.21.8; fix: InfinityBucket won't fill cauldron
Some checks failed
Gitea Actions Demo / Build-Gradle (push) Has been cancelled

This commit is contained in:
Your Name
2025-08-27 13:11:45 +02:00
parent dc2b481857
commit 32b44891c8
5 changed files with 93 additions and 121 deletions

View File

@@ -6,9 +6,6 @@ import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scoreboard.ScoreboardManager;
import de.hessj.helper.Helper.Type;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.TextDecoration;
import net.md_5.bungee.api.ChatColor;
@@ -26,8 +23,6 @@ import org.bukkit.inventory.RecipeChoice.MaterialChoice;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.components.CustomModelDataComponent;
import org.bukkit.persistence.PersistentDataType;
import java.util.AbstractMap.SimpleEntry;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -35,9 +30,6 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.bukkit.scoreboard.Scoreboard;
import java.time.*;
import java.util.Map.Entry;
public class App extends JavaPlugin {
public static de.hessj.helper.Helper helper = new de.hessj.helper.Helper();
@@ -572,7 +564,7 @@ for (Player p : Bukkit.getOnlinePlayers()) {
pM.registerEvents(new MobBurner(), this);
pM.registerEvents(new AutoCrafter(), this);
pM.registerEvents(new AFKListener(), this);
pM.registerEvents(new CauldronConcrete(), this);
pM.registerEvents(new BetterCauldrons(), this);
pM.registerEvents(new InfinityWaterBucket(), this);
pM.registerEvents(new ArmoredElytra(), this);
pM.registerEvents(new ShulkerPreview(), this);

View File

@@ -0,0 +1,44 @@
//GPT'd
package de.hessj.environmentex;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Item;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import com.google.common.base.Enums;
import io.papermc.paper.event.entity.EntityInsideBlockEvent;
public class BetterCauldrons implements Listener {
@EventHandler
public void onPowderDrop(EntityInsideBlockEvent event) {
if (!(event.getEntity() instanceof Item item))
return;
Block block = event.getBlock();
if (block.getType() != Material.WATER_CAULDRON)
return;
ItemStack stack = item.getItemStack();
Material type = stack.getType();
if (!type.name().endsWith("_CONCRETE_POWDER") && type != Material.DIRT && type != Material.ROOTED_DIRT
&& type != Material.COARSE_DIRT) {
return;
}
if (type == Material.DIRT || type == Material.ROOTED_DIRT || type == Material.COARSE_DIRT) {
item.getWorld().dropItem(item.getLocation(), new ItemStack(Material.MUD, stack.getAmount()));
} else {
String hardenedName = type.name().replace("_POWDER", "");
Material hardened = Enums.getIfPresent(Material.class, hardenedName).orNull();
if (hardened == null)
return;
item.getWorld().dropItem(item.getLocation(), new ItemStack(hardened, stack.getAmount()));
}
item.remove();
}
}

View File

@@ -1,34 +0,0 @@
//GPT'd
package de.hessj.environmentex;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Item;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import com.google.common.base.Enums;
import io.papermc.paper.event.entity.EntityInsideBlockEvent;
public class CauldronConcrete implements Listener {
@EventHandler
public void onPowderDrop(EntityInsideBlockEvent event) {
if (!(event.getEntity() instanceof Item item)) return;
Block block = event.getBlock();
if (block.getType() != Material.WATER_CAULDRON) return;
ItemStack stack = item.getItemStack();
Material type = stack.getType();
if (!type.name().endsWith("_CONCRETE_POWDER")) return;
String hardenedName = type.name().replace("_POWDER", "");
Material hardened = Enums.getIfPresent(Material.class, hardenedName).orNull();
if (hardened == null) return;
item.getWorld().dropItem(item.getLocation(), new ItemStack(hardened, stack.getAmount()));
item.remove();
}
}

View File

@@ -1,15 +1,13 @@
//TODO: needs fix!
//GPT'd
package de.hessj.environmentex;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftItem;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
@@ -20,94 +18,72 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BookMeta;
import de.hessj.helper.Helper.Type;
import net.kyori.adventure.inventory.Book;
import net.kyori.adventure.text.Component;
public class Filter implements Listener {
long creationTime = 0;
public de.hessj.helper.Helper helper= new de.hessj.helper.Helper();
private long creationTime = 0;
private final de.hessj.helper.Helper helper = new de.hessj.helper.Helper();
public void addToBook(Player pl, Material m, String name) {
if (creationTime == 0) {
BookMeta bm = (BookMeta) pl.getInventory().getItemInMainHand().getItemMeta();
ItemStack book = pl.getInventory().getItemInMainHand();
if (!(book.getItemMeta() instanceof BookMeta bm)) {
return;
}
if (bm.getPageCount() < 100) {
boolean isWritten = false;
List<Component> pages = new ArrayList<>(bm.pages());
Component matchedPage = null;
ItemStack b = pl.getInventory().getItemInMainHand();
Boolean isWritten = false;
List<Component> pages = new ArrayList<>();
for (Component p : bm.pages()) {
String answer = p.toString().substring(p.toString().indexOf("content=\""));
answer = answer.substring(answer.indexOf("\""));
answer = answer.substring(1, answer.indexOf("\"", answer.indexOf("\"") + 1));
if (answer != "") {
pages.add(p);
}
}
Component testp = null;
for (Component p : pages) {
String answer = p.toString().substring(p.toString().indexOf("content=\""));
answer = answer.substring(answer.indexOf("\""));
answer = answer.substring(1, answer.indexOf("\"", answer.indexOf("\"") + 1));
if (answer.equals(m.toString())) {
String content = p instanceof net.kyori.adventure.text.TextComponent tc ? tc.content() : "";
if (content.equalsIgnoreCase(m.toString())) {
isWritten = true;
testp = p;
matchedPage = p;
break;
}
}
if (isWritten) {
pl
.sendMessage(helper.R3SMessage(Type.INFO, "[ItemFilter] " + name + " wurde aus dem Buch ausgetragen!"));
pages.remove(testp);
pl.sendMessage(helper.R3SMessage(Type.INFO, "[ItemFilter] " + name + " wurde aus dem Buch ausgetragen!"));
pages.remove(matchedPage);
} else {
pages.add(Component.text(m.toString()));
pl.sendMessage(helper.R3SMessage(Type.INFO, "[ItemFilter] " + name + " wurde in das Buch übertragen!"));
}
bm.pages(pages);
b.setItemMeta(bm);
book.setItemMeta(bm);
} else {
pl
.sendMessage(helper.R3SMessage(Type.ERROR, "[ItemFilter] Du kannst nur bis zu 100 Items filtern! Entferne ein paar Seiten aus dem Buch!"));
pl.sendMessage(helper.R3SMessage(Type.ERROR,
"[ItemFilter] Du kannst nur bis zu 100 Items filtern! Entferne ein paar Seiten aus dem Buch!"));
}
creationTime = Instant.now().getEpochSecond();
Bukkit.getScheduler().scheduleSyncDelayedTask(App.main, new Runnable() {
public void run() {
creationTime = 0;
return;
}
}, 15);
Bukkit.getScheduler().runTaskLater(App.main, () -> creationTime = 0, 15L);
}
}
@EventHandler
public void selectFilter(PlayerInteractEvent e) {
if (e.getAction() == Action.LEFT_CLICK_BLOCK) {
if (e.getPlayer().getInventory().getItemInMainHand() != null
&& e.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.WRITABLE_BOOK)
&& e.getPlayer().getInventory().getItemInMainHand().hasItemMeta()
&& e.getPlayer().getInventory().getItemInMainHand().getItemMeta().hasDisplayName() &&
e.getPlayer().getInventory().getItemInMainHand().getItemMeta().displayName()
.equals(Component.text("Filter"))) {
ItemStack hand = e.getPlayer().getInventory().getItemInMainHand();
if (hand != null && hand.getType() == Material.WRITABLE_BOOK && hand.hasItemMeta()
&& hand.getItemMeta().hasDisplayName()
&& Component.text("Filter").equals(hand.getItemMeta().displayName())) {
Location loc = e.getClickedBlock().getLocation();
List<Item> nearbyItems = new ArrayList<>(loc.getNearbyEntitiesByType(Item.class, 1, 2, 1));
if (loc.getNearbyEntitiesByType(CraftItem.class, 1, 2, 1).size() > 1) {
e.getPlayer().sendMessage(helper.R3SMessage(Type.ERROR, "[ItemFilter] Bitte nur ein Item gleichzeitig!"));
} else {
for (Entity en : loc.getNearbyEntitiesByType(CraftItem.class, 1, 2, 1)) {
CraftItem itm = (CraftItem) en;
if (nearbyItems.size() > 1) {
e.getPlayer().sendMessage(helper.R3SMessage(Type.ERROR,
"[ItemFilter] Bitte nur ein Item gleichzeitig!"));
} else if (!nearbyItems.isEmpty()) {
Item itm = nearbyItems.get(0);
addToBook(e.getPlayer(), itm.getItemStack().getType(), itm.getItemStack().getType().name());
break;
}
}
}
}
@@ -115,31 +91,21 @@ public class Filter implements Listener {
@EventHandler
public void onPickup(PlayerAttemptPickupItemEvent e) {
BookMeta bm = null;
Book b = null;
for (ItemStack is : e.getPlayer().getInventory().getContents()) {
if (is != null && is.getType().equals(Material.WRITABLE_BOOK)) {
bm = (BookMeta) is.getItemMeta();
b = bm;
if (is != null && is.getType() == Material.WRITABLE_BOOK) {
if (!(is.getItemMeta() instanceof BookMeta bm)) continue;
if (is.hasItemMeta() && is.getItemMeta().hasDisplayName()
&& is.getItemMeta().displayName().equals(Component.text("Filter"))) {
&& Component.text("Filter").equals(is.getItemMeta().displayName())) {
for (Component p : b.pages()) {
String answer = p.toString().substring(p.toString().indexOf("content=\""));
answer = answer.substring(answer.indexOf("\""));
answer = answer.substring(1, answer.indexOf("\"", answer.indexOf("\"") + 1));
if (answer.equals(e.getItem().getItemStack().getType().toString())) {
for (Component p : bm.pages()) {
String content = p instanceof net.kyori.adventure.text.TextComponent tc ? tc.content() : "";
if (content.equalsIgnoreCase(e.getItem().getItemStack().getType().toString())) {
e.setCancelled(true);
break;
}
}
}
return;
}
}

View File

@@ -103,13 +103,17 @@ public class InfinityWaterBucket implements Listener {
Player player = event.getPlayer();
if (player.getWorld().getEnvironment() == Environment.NETHER){
if (player.getWorld().getEnvironment() == Environment.NETHER) {
event.setCancelled(true);
return;
}
if ((App.helper.isInteractable(event.getClickedBlock()) && !player.isSneaking())) {
return;
}
if (event.getClickedBlock().getType() == Material.CAULDRON
|| event.getClickedBlock().getType() == Material.WATER_CAULDRON) {
return;
}
event.setCancelled(true);
Block clickedBlock = event.getClickedBlock();