mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
Upstream has released updates that appears to apply and compile correctly Paper Changes: 54890033 [Auto] Updated Upstream (CraftBukkit) f96c6f5c [Auto] Updated Upstream (CraftBukkit) 4be8312f [CI-SKIP] [Auto] Rebuild Patches 43e5174a Fix Entity Teleportation and cancel velocity if teleported (#4210) 0fb3daf4 [Auto] Updated Upstream (CraftBukkit) 819ff324 Use wrapped StructureManager to prevent worldgen deadlock 507f302c Fix Zombie ShouldBurnInDay API (#4268) ef5af6f6 [Auto] Updated Upstream (CraftBukkit) 101b0110 [Auto] Updated Upstream (Bukkit/CraftBukkit) 03689cf9 Fix javadoc (#4276) c247857f Cache block data strings ce2eae5c [Auto] Updated Upstream (Bukkit/CraftBukkit) 563f77ad install remapped server jar to paper package space 1ab021dd Updated Upstream (Bukkit/CraftBukkit) c970f880 Properly pass the close reason for new inventory opens (#2658) (#4247) 07bca94f Create HoverEvent from ItemStack Entity da33f8bb Add a way to get translation keys for blocks, entities and materials 5a20cbd7 Add more Evoker API 7a3e2520 [Auto] Updated Upstream (CraftBukkit) b0cbebdc Fix build conflicts dfc54a8b Add zombie targets turtle egg config (#4181) 0fe00f61 Add BellRingEvent for village bells (#2230) 414e5e1d fix #4144 (#4170) 5c7f3fc0 Fix PersistentDataContainer contract violation (_->!null returns null) (#3990) 65dbf5ff [CI-SKIP] [Auto] Rebuild Patches 7ed0f7f0 Fix NPE in getBedSpawnLocation (#4238) 9e0f1101 [CI-SKIP] Add issue template 6c138412 Fix CraftTeam null check (#4249) 32e45448 Update Paperclip b84a37b7 Update Armor items in PlayerArmorChangeEvent (#4243) a67abf5b Increase visibility of a few methods 7d69214b [Auto] Updated Upstream (CraftBukkit) cbfc2362 PortalCreateEvent needs to know its entity 29032edb Fix PersistentDataContainer contract violation (_->!null returns null) f42c53df [CI-SKIP] [Auto] Rebuild Patches 3efe45f5 Port Eigencraft to 1.16 0bad6958 Make engine-mode 2 truly random cd06ca5e Updated Upstream (CraftBukkit) ef36b4f8 Fix TNT not pushing creative players 915fe522 Fix hex colors not working in some kick messages f5904171 [Auto] Updated Upstream (Bukkit/CraftBukkit) 757948dc [Auto] Updated Upstream (CraftBukkit) 0893de14 Fix reading the brand message from clients 243d2313 Updated Upstream (Bukkit/CraftBukkit) 4cc7de6c Add playPickupItemAnimation to LivingEntity 20fc1b5c [Auto] Updated Upstream (CraftBukkit/Spigot) 655258b3 [Auto] Updated Upstream (CraftBukkit) 167b1db6 Fix some modded clients getting kicked for invalid payload - Fixes #4201 7f0786cd Fix enderdragon tracking range to honor vanilla 586073c3 [CI-SKIP] Update README.md (for 1.16.2) (#4202) 853f4168 Remove debug 4d7ea429 fix config option in last commit 74d27463 Buffer joins to world ac96307b [CI-SKIP] switch back to trusty now we figured out the issue c97ce029 1.16.2 Release (#4123) 5486b3db Fix javadocs failing jenkins builds (#4189) 1330eb5f Brand support b8372fc0 Improve handling of indestructable blocks a2a06640 Add moon phase API 47f71aea Fix SpawnChangeEvent not firing for all use-cases b6c860f2 Don't require FACING data 0c1716a1 Add #setMaxPlayers API 02aed275 [CI-SKIP] Require dependencies script (#4172) 1ccc1c67 Add smithing item helpers 627f4b85 Brand support 20d9ec6b Fix MC-197271 e9287056 [CI-SKIP] Update issue templates with notices dccaf59a MC-197883: Bandaid decode issue 99a1e58f Merge branch 'master' into progress/1.16.2 ecbc5ca0 Updated Upstream (CraftBukkit) 99362d3c Decomp fix 5f9861a0 Fix MC-197883 by specifying the typeKey 1d8c9c23 [CI-SKIP] Make checkoutpr.sh use $SHELL (#4167) 2b1ca210 update checkout-pr to latest I use 95c9b45d Fix IDE Debug JVM Flag 2 (#4141) 9e6d742c Merge remote-tracking branch 'origin/master' into progress/1.16.2 c8542f23 Fix MC-99259 Wither Boss Bar doesn't update until invulnerability period is over (#4164) 862b8c18 Updated Upstream (Bukkit/CraftBukkit) 100d51eb Do not obfuscate air (#4149) 47740f67 Updated Upstream (CraftBukkit) 948c20e0 Merge remote-tracking branch 'origin/master' into progress/1.16.2 1daafe45 Updated Upstream (Bukkit/CraftBukkit) 98828b00 Merge pull request #4132 from Proximyst/progress/1.16.2 b23f27f8 Fix incorrect return for WorldServer#addAllEntitiesSafely (#3) 5085fa30 Fix MC-187716 Use configured height c44add5a Initialise a new chunk section if none was found yet updated 74a4d5f8 Remove armour stand double add to world 6d25cc4e Don't mark null chunk sections for block updates 1ba2f214 Updated Upstream (Bukkit/CraftBukkit) d29d5aaa Fix anti xray ce6bbaa4 Import fastutil classes patch 9d4616a4 Updated Upstream (Bukkit/CraftBukkit) 109d072b Fix test, add strider mob goal and fix piglin goals e6caaa20 Fix running; forgot to push this ee7dce8b Add this to SHIT_TO_CHECK.md aswell d378257c Fix IDE debug JVM flag for 1.16.2 0d8db446 Merge pull request #4112 from BillyGalbreath/progress/1.16.2 d319d8c4 It compiles! 8f8371c5 Add an OBFHELPER 9caa8e9f missed this 3ce5a5d7 volatile 159eb2e1 Oopsies 7eb08d2f Almost ready 7ca11e97 Current progress on 1.16.2 Tuinity Changes: eaa6b50 Fix missing block property portal crash fea5fbd Retain vanilla behavior for error correction rules in collisions 9eb1a3e Do not add a delayed unload ticket for some ticket types
195 lines
9.4 KiB
Diff
195 lines
9.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
|
Date: Thu, 9 May 2019 14:27:37 -0500
|
|
Subject: [PATCH] Silk touch spawners
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java
|
|
index 4b4f14711..372ee6adc 100644
|
|
--- a/src/main/java/net/minecraft/server/Block.java
|
|
+++ b/src/main/java/net/minecraft/server/Block.java
|
|
@@ -223,6 +223,7 @@ public class Block extends BlockBase implements IMaterial {
|
|
|
|
}
|
|
|
|
+ public static void dropItem(World world, BlockPosition blockposition, ItemStack itemstack) { a(world, blockposition, itemstack); } // Purpur - OBFHELPER
|
|
public static void a(World world, BlockPosition blockposition, ItemStack itemstack) {
|
|
if (!world.isClientSide && !itemstack.isEmpty() && world.getGameRules().getBoolean(GameRules.DO_TILE_DROPS)) {
|
|
float f = 0.5F;
|
|
diff --git a/src/main/java/net/minecraft/server/BlockMobSpawner.java b/src/main/java/net/minecraft/server/BlockMobSpawner.java
|
|
index 81e145ff0..91b92d95a 100644
|
|
--- a/src/main/java/net/minecraft/server/BlockMobSpawner.java
|
|
+++ b/src/main/java/net/minecraft/server/BlockMobSpawner.java
|
|
@@ -1,5 +1,14 @@
|
|
package net.minecraft.server;
|
|
|
|
+// Purpur start
|
|
+import net.md_5.bungee.api.ChatColor;
|
|
+import net.md_5.bungee.api.chat.BaseComponent;
|
|
+import net.md_5.bungee.api.chat.TextComponent;
|
|
+import net.md_5.bungee.chat.ComponentSerializer;
|
|
+
|
|
+import java.util.List;
|
|
+// Purpur end
|
|
+
|
|
public class BlockMobSpawner extends BlockTileEntity {
|
|
|
|
protected BlockMobSpawner(BlockBase.Info blockbase_info) {
|
|
@@ -11,6 +20,59 @@ public class BlockMobSpawner extends BlockTileEntity {
|
|
return new TileEntityMobSpawner();
|
|
}
|
|
|
|
+ // Purpur start
|
|
+ @Override
|
|
+ public void a(World world, EntityHuman entityhuman, BlockPosition blockposition, IBlockData iblockdata, TileEntity tileentity, ItemStack itemstack) {
|
|
+ if (world.purpurConfig.silkTouchEnabled && entityhuman.getBukkitEntity().hasPermission("purpur.drop.spawners") && isSilkTouch(world, itemstack)) {
|
|
+ MinecraftKey type = ((TileEntityMobSpawner) tileentity).getSpawner().getMobName();
|
|
+ if (type != null) {
|
|
+ String mobName = EntityTypes.getFromKey(type).getTranslatedName();
|
|
+
|
|
+ NBTTagCompound display = new NBTTagCompound();
|
|
+ boolean customDisplay = false;
|
|
+
|
|
+ String name = world.purpurConfig.silkTouchSpawnerName;
|
|
+ if (name != null && !name.isEmpty() && !name.equals("Spawner")) {
|
|
+ name = ChatColor.translateAlternateColorCodes('&', name
|
|
+ .replace("{mob}", mobName));
|
|
+ BaseComponent[] comp = TextComponent.fromLegacyText(name);
|
|
+ display.set("Name", NBTTagString.create(ComponentSerializer.toString(comp)));
|
|
+ customDisplay = true;
|
|
+ }
|
|
+
|
|
+ List<String> lore = world.purpurConfig.silkTouchSpawnerLore;
|
|
+ if (lore != null && !lore.isEmpty()) {
|
|
+ NBTTagList list = new NBTTagList();
|
|
+ for (String line : lore) {
|
|
+ line = ChatColor.translateAlternateColorCodes('&', line
|
|
+ .replace("{mob}", mobName));
|
|
+ BaseComponent[] comp = TextComponent.fromLegacyText(line);
|
|
+ list.add(NBTTagString.create(ComponentSerializer.toString(comp)));
|
|
+ }
|
|
+ display.set("Lore", list);
|
|
+ customDisplay = true;
|
|
+ }
|
|
+
|
|
+ NBTTagCompound tag = new NBTTagCompound();
|
|
+ if (customDisplay) {
|
|
+ tag.set("display", display);
|
|
+ }
|
|
+ tag.setString("Purpur.mob_type", type.toString());
|
|
+
|
|
+ ItemStack item = new ItemStack(Blocks.SPAWNER.getItem());
|
|
+ item.setTag(tag);
|
|
+
|
|
+ dropItem(world, blockposition, item);
|
|
+ }
|
|
+ }
|
|
+ super.a(world, entityhuman, blockposition, iblockdata, tileentity, itemstack);
|
|
+ }
|
|
+
|
|
+ private boolean isSilkTouch(World world, ItemStack itemstack) {
|
|
+ return itemstack != null && world.purpurConfig.silkTouchTools.contains(itemstack.getItem()) && EnchantmentManager.getEnchantmentLevel(Enchantments.SILK_TOUCH, itemstack) > 0;
|
|
+ }
|
|
+ // Purpur end
|
|
+
|
|
@Override
|
|
public void dropNaturally(IBlockData iblockdata, WorldServer worldserver, BlockPosition blockposition, ItemStack itemstack) {
|
|
super.dropNaturally(iblockdata, worldserver, blockposition, itemstack);
|
|
@@ -23,6 +85,7 @@ public class BlockMobSpawner extends BlockTileEntity {
|
|
|
|
@Override
|
|
public int getExpDrop(IBlockData iblockdata, WorldServer worldserver, BlockPosition blockposition, ItemStack itemstack) {
|
|
+ if (isSilkTouch(worldserver, itemstack)) return 0; // Purpur
|
|
int i = 15 + worldserver.random.nextInt(15) + worldserver.random.nextInt(15);
|
|
|
|
return i;
|
|
diff --git a/src/main/java/net/minecraft/server/ItemSpawner.java b/src/main/java/net/minecraft/server/ItemSpawner.java
|
|
new file mode 100644
|
|
index 000000000..5c7f73918
|
|
--- /dev/null
|
|
+++ b/src/main/java/net/minecraft/server/ItemSpawner.java
|
|
@@ -0,0 +1,23 @@
|
|
+package net.minecraft.server;
|
|
+
|
|
+public class ItemSpawner extends ItemBlock {
|
|
+ public ItemSpawner(Block block, Info info) {
|
|
+ super(block, info);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ protected boolean a(BlockPosition blockposition, World world, EntityHuman entityhuman, ItemStack itemstack, IBlockData iblockdata) {
|
|
+ boolean handled = super.a(blockposition, world, entityhuman, itemstack, iblockdata);
|
|
+ if (world.purpurConfig.silkTouchEnabled && entityhuman.getBukkitEntity().hasPermission("purpur.place.spawners")) {
|
|
+ TileEntity spawner = world.getTileEntity(blockposition);
|
|
+ if (spawner instanceof TileEntityMobSpawner && itemstack.hasTag()) {
|
|
+ NBTTagCompound tag = itemstack.getTag();
|
|
+ if (tag.hasKey("Purpur.mob_type")) {
|
|
+ EntityTypes.getByName(tag.getString("Purpur.mob_type")).ifPresent(type ->
|
|
+ ((TileEntityMobSpawner) spawner).getSpawner().setMobName(type));
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ return handled;
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/java/net/minecraft/server/Items.java b/src/main/java/net/minecraft/server/Items.java
|
|
index 1c861bccc..67ebcbe4d 100644
|
|
--- a/src/main/java/net/minecraft/server/Items.java
|
|
+++ b/src/main/java/net/minecraft/server/Items.java
|
|
@@ -180,7 +180,7 @@ public class Items {
|
|
public static final Item ct = a(Blocks.PURPUR_BLOCK, CreativeModeTab.b);
|
|
public static final Item cu = a(Blocks.PURPUR_PILLAR, CreativeModeTab.b);
|
|
public static final Item cv = a(Blocks.PURPUR_STAIRS, CreativeModeTab.b);
|
|
- public static final Item cw = a(Blocks.SPAWNER);
|
|
+ public static final Item cw = a(Blocks.SPAWNER, new ItemSpawner(Blocks.SPAWNER, new Item.Info().a(EnumItemRarity.EPIC))); // Purpur
|
|
public static final Item cx = a(Blocks.OAK_STAIRS, CreativeModeTab.b);
|
|
public static final Item cy = a(Blocks.CHEST, CreativeModeTab.c);
|
|
public static final Item cz = a(Blocks.DIAMOND_ORE, CreativeModeTab.b);
|
|
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
index c7fb5a737..ba89efb31 100644
|
|
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
@@ -1,6 +1,12 @@
|
|
package net.pl3x.purpur;
|
|
|
|
+import net.minecraft.server.IRegistry;
|
|
+import net.minecraft.server.Item;
|
|
+import net.minecraft.server.Items;
|
|
+import net.minecraft.server.MinecraftKey;
|
|
import org.bukkit.configuration.ConfigurationSection;
|
|
+
|
|
+import java.util.ArrayList;
|
|
import java.util.List;
|
|
import static net.pl3x.purpur.PurpurConfig.log;
|
|
|
|
@@ -75,6 +81,29 @@ public class PurpurWorldConfig {
|
|
playerInvulnerableWhileAcceptingResourcePack = getBoolean("gameplay-mechanics.player.invulnerable-while-accepting-resource-pack", playerInvulnerableWhileAcceptingResourcePack);
|
|
}
|
|
|
|
+ public boolean silkTouchEnabled = false;
|
|
+ public String silkTouchSpawnerName = "Spawner";
|
|
+ public List<String> silkTouchSpawnerLore = new ArrayList<>();
|
|
+ public List<Item> silkTouchTools = new ArrayList<>();
|
|
+ private void silkTouchSettings() {
|
|
+ silkTouchEnabled = getBoolean("gameplay-mechanics.silk-touch.enabled", silkTouchEnabled);
|
|
+ silkTouchSpawnerName = getString("gameplay-mechanics.silk-touch.spawner-name", silkTouchSpawnerName);
|
|
+ silkTouchSpawnerLore.clear();
|
|
+ getList("gameplay-mechanics.silk-touch.spawner-lore", new ArrayList<String>(){{
|
|
+ add("Spawns a {mob}");
|
|
+ }}).forEach(line -> silkTouchSpawnerLore.add(line.toString()));
|
|
+ silkTouchTools.clear();
|
|
+ getList("gameplay-mechanics.silk-touch.tools", new ArrayList<String>(){{
|
|
+ add("minecraft:iron_pickaxe");
|
|
+ add("minecraft:golden_pickaxe");
|
|
+ add("minecraft:diamond_pickaxe");
|
|
+ add("minecraft:netherite_pickaxe");
|
|
+ }}).forEach(key -> {
|
|
+ Item item = IRegistry.ITEM.get(new MinecraftKey(key.toString()));
|
|
+ if (item != Items.AIR) silkTouchTools.add(item);
|
|
+ });
|
|
+ }
|
|
+
|
|
public int villagerBrainTicks = 1;
|
|
public boolean villagerUseBrainTicksOnlyWhenLagging = true;
|
|
private void villagerSettings() {
|