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
Some checks failed
Gitea Actions Demo / Build-Gradle (push) Has been cancelled
This commit is contained in:
@@ -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);
|
||||
|
||||
44
environmentex/src/main/java/de/hessj/environmentex/BetterCauldrons.java
Executable file
44
environmentex/src/main/java/de/hessj/environmentex/BetterCauldrons.java
Executable 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();
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,6 +110,10 @@ public class InfinityWaterBucket implements Listener {
|
||||
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();
|
||||
|
||||
Reference in New Issue
Block a user