9
0
mirror of https://github.com/Dreeam-qwq/Gale.git synced 2025-12-19 14:59:29 +00:00
Files
Gale/gale-archived-patches/work/server/0079-Cache-ominous-banner-item.patch
2025-01-07 18:39:31 -05:00

174 lines
13 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Martijn Muijsers <martijnmuijsers@live.nl>
Date: Thu, 1 Dec 2022 00:37:50 +0100
Subject: [PATCH] Cache ominous banner item
License: LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.html)
Gale - https://galemc.org
This patch is based on the following mixin:
"me/jellysquid/mods/lithium/mixin/ai/raid/RaiderEntityMixin.java"
By: 2No2Name <2No2Name@web.de>
As part of: Lithium (https://github.com/CaffeineMC/lithium-fabric)
Licensed under: LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.html)
diff --git a/src/main/java/net/minecraft/advancements/critereon/EntityEquipmentPredicate.java b/src/main/java/net/minecraft/advancements/critereon/EntityEquipmentPredicate.java
index ff9d99feb75a8e0f695b8f2696bd79baccf77e01..1712e45439e3ebcb61703ac30eaa92e85f99b676 100644
--- a/src/main/java/net/minecraft/advancements/critereon/EntityEquipmentPredicate.java
+++ b/src/main/java/net/minecraft/advancements/critereon/EntityEquipmentPredicate.java
@@ -40,7 +40,7 @@ public record EntityEquipmentPredicate(
.head(
ItemPredicate.Builder.item()
.of(Items.WHITE_BANNER)
- .hasComponents(DataComponentPredicate.allOf(Raid.getLeaderBannerInstance(bannerPatternLookup).getComponents()))
+ .hasComponents(DataComponentPredicate.allOf(Raid.getLeaderBanner(bannerPatternLookup).getComponents())) // Gale - Lithium - cache ominous banner item
)
.build();
}
diff --git a/src/main/java/net/minecraft/data/advancements/packs/VanillaAdventureAdvancements.java b/src/main/java/net/minecraft/data/advancements/packs/VanillaAdventureAdvancements.java
index 09d93c4814ee918d4a2d73794bcd5bdda5a4f8eb..3187956a47182951d239a6d3cc5a8c79ba9c5b38 100644
--- a/src/main/java/net/minecraft/data/advancements/packs/VanillaAdventureAdvancements.java
+++ b/src/main/java/net/minecraft/data/advancements/packs/VanillaAdventureAdvancements.java
@@ -394,7 +394,7 @@ public class VanillaAdventureAdvancements implements AdvancementSubProvider {
AdvancementHolder advancementHolder8 = Advancement.Builder.advancement()
.parent(advancementHolder)
.display(
- Raid.getLeaderBannerInstance(registryLookup),
+ Raid.getLeaderBanner(registryLookup), // Gale - Lithium - cache ominous banner item
Component.translatable("advancements.adventure.voluntary_exile.title"),
Component.translatable("advancements.adventure.voluntary_exile.description"),
null,
@@ -413,7 +413,7 @@ public class VanillaAdventureAdvancements implements AdvancementSubProvider {
Advancement.Builder.advancement()
.parent(advancementHolder8)
.display(
- Raid.getLeaderBannerInstance(registryLookup),
+ Raid.getLeaderBanner(registryLookup), // Gale - Lithium - cache ominous banner item
Component.translatable("advancements.adventure.hero_of_the_village.title"),
Component.translatable("advancements.adventure.hero_of_the_village.description"),
null,
diff --git a/src/main/java/net/minecraft/server/commands/RaidCommand.java b/src/main/java/net/minecraft/server/commands/RaidCommand.java
index 774bc4b5bc8c56ff3b0997de5eb1c46ef9ea7d2e..468dd8f6372751f52c0bedef19879a12de412789 100644
--- a/src/main/java/net/minecraft/server/commands/RaidCommand.java
+++ b/src/main/java/net/minecraft/server/commands/RaidCommand.java
@@ -95,7 +95,7 @@ public class RaidCommand {
return 0;
} else {
raider.setPatrolLeader(true);
- raider.setItemSlot(EquipmentSlot.HEAD, Raid.getLeaderBannerInstance(source.registryAccess().lookupOrThrow(Registries.BANNER_PATTERN)));
+ raider.setItemSlot(EquipmentSlot.HEAD, Raid.getLeaderBanner(source.registryAccess().lookupOrThrow(Registries.BANNER_PATTERN))); // Gale - Lithium - cache ominous banner item
raider.setPos(source.getPosition().x, source.getPosition().y, source.getPosition().z);
raider.finalizeSpawn(
source.getLevel(), source.getLevel().getCurrentDifficultyAt(BlockPos.containing(source.getPosition())), MobSpawnType.COMMAND, null
diff --git a/src/main/java/net/minecraft/world/entity/monster/PatrollingMonster.java b/src/main/java/net/minecraft/world/entity/monster/PatrollingMonster.java
index 7e1a4b69291e14dc0323b3f40aa4acce8c4b0acf..1ddc36fdf98b5d7ec1658fe3d2eb38eff6634a52 100644
--- a/src/main/java/net/minecraft/world/entity/monster/PatrollingMonster.java
+++ b/src/main/java/net/minecraft/world/entity/monster/PatrollingMonster.java
@@ -74,7 +74,7 @@ public abstract class PatrollingMonster extends Monster {
}
if (this.isPatrolLeader()) {
- this.setItemSlot(EquipmentSlot.HEAD, Raid.getLeaderBannerInstance(this.registryAccess().lookupOrThrow(Registries.BANNER_PATTERN)));
+ this.setItemSlot(EquipmentSlot.HEAD, Raid.getLeaderBanner(this.registryAccess().lookupOrThrow(Registries.BANNER_PATTERN))); // Gale - Lithium - cache ominous banner item
this.setDropChance(EquipmentSlot.HEAD, 2.0F);
}
diff --git a/src/main/java/net/minecraft/world/entity/raid/Raid.java b/src/main/java/net/minecraft/world/entity/raid/Raid.java
index 5c0e5803284bfc82c2dd8bba9ded0ba7aac4962a..539e17bdeefd0be17a46cb65e034c7e0e4df181c 100644
--- a/src/main/java/net/minecraft/world/entity/raid/Raid.java
+++ b/src/main/java/net/minecraft/world/entity/raid/Raid.java
@@ -725,7 +725,7 @@ public class Raid {
this.level.getRaids().setDirty();
}
- public static ItemStack getLeaderBannerInstance(HolderGetter<BannerPattern> bannerPatternLookup) {
+ private static ItemStack createLeaderBanner(HolderGetter<BannerPattern> bannerPatternLookup) { // Gale - Lithium - cache ominous banner item
ItemStack itemstack = new ItemStack(Items.WHITE_BANNER);
BannerPatternLayers bannerpatternlayers = (new BannerPatternLayers.Builder()).addIfRegistered(bannerPatternLookup, BannerPatterns.RHOMBUS_MIDDLE, DyeColor.CYAN).addIfRegistered(bannerPatternLookup, BannerPatterns.STRIPE_BOTTOM, DyeColor.LIGHT_GRAY).addIfRegistered(bannerPatternLookup, BannerPatterns.STRIPE_CENTER, DyeColor.GRAY).addIfRegistered(bannerPatternLookup, BannerPatterns.BORDER, DyeColor.LIGHT_GRAY).addIfRegistered(bannerPatternLookup, BannerPatterns.STRIPE_MIDDLE, DyeColor.BLACK).addIfRegistered(bannerPatternLookup, BannerPatterns.HALF_HORIZONTAL, DyeColor.LIGHT_GRAY).addIfRegistered(bannerPatternLookup, BannerPatterns.CIRCLE_MIDDLE, DyeColor.LIGHT_GRAY).addIfRegistered(bannerPatternLookup, BannerPatterns.BORDER, DyeColor.BLACK).build();
@@ -735,6 +735,22 @@ public class Raid {
return itemstack;
}
+ // Gale start - Lithium - cache ominous banner item
+ public static ItemStack LEADER_BANNER = ItemStack.EMPTY;
+
+ public static ItemStack getLeaderBanner(HolderGetter<BannerPattern> bannerPatternLookup) {
+ if (LEADER_BANNER.equals(ItemStack.EMPTY)) {
+ LEADER_BANNER = createLeaderBanner(bannerPatternLookup);
+ }
+
+ return LEADER_BANNER;
+ }
+
+ public static ItemStack getLeaderBannerInstance(HolderGetter<BannerPattern> bannerPatternLookup) {
+ return getLeaderBanner(bannerPatternLookup).copy();
+ }
+ // Gale end - Lithium - cache ominous banner item
+
@Nullable
public Raider getLeader(int wave) {
return (Raider) this.groupToLeaderMap.get(wave);
@@ -803,7 +819,7 @@ public class Raid {
public void setLeader(int wave, Raider entity) {
this.groupToLeaderMap.put(wave, entity);
- entity.setItemSlot(EquipmentSlot.HEAD, Raid.getLeaderBannerInstance(entity.registryAccess().lookupOrThrow(Registries.BANNER_PATTERN)));
+ entity.setItemSlot(EquipmentSlot.HEAD, Raid.getLeaderBanner(entity.registryAccess().lookupOrThrow(Registries.BANNER_PATTERN))); // Gale - Lithium - cache ominous banner item
entity.setDropChance(EquipmentSlot.HEAD, 2.0F);
}
diff --git a/src/main/java/net/minecraft/world/entity/raid/Raider.java b/src/main/java/net/minecraft/world/entity/raid/Raider.java
index bbf21ea433f9e3963aac0ede597ed8d3c8e50ed8..9c958635f9b9ca82d49062fdc35b7ebadf02bb2f 100644
--- a/src/main/java/net/minecraft/world/entity/raid/Raider.java
+++ b/src/main/java/net/minecraft/world/entity/raid/Raider.java
@@ -45,7 +45,7 @@ public abstract class Raider extends PatrollingMonster {
protected static final EntityDataAccessor<Boolean> IS_CELEBRATING = SynchedEntityData.defineId(Raider.class, EntityDataSerializers.BOOLEAN);
static final Predicate<ItemEntity> ALLOWED_ITEMS = (entityitem) -> {
- return !entityitem.hasPickUpDelay() && entityitem.isAlive() && ItemStack.matches(entityitem.getItem(), Raid.getLeaderBannerInstance(entityitem.registryAccess().lookupOrThrow(Registries.BANNER_PATTERN)));
+ return !entityitem.hasPickUpDelay() && entityitem.isAlive() && ItemStack.matches(entityitem.getItem(), Raid.getLeaderBanner(entityitem.registryAccess().lookupOrThrow(Registries.BANNER_PATTERN))); // Gale - Lithium - cache ominous banner item
};
@Nullable
protected Raid raid;
@@ -152,7 +152,7 @@ public abstract class Raider extends PatrollingMonster {
public boolean isCaptain() {
ItemStack itemstack = this.getItemBySlot(EquipmentSlot.HEAD);
- boolean flag = !itemstack.isEmpty() && ItemStack.matches(itemstack, Raid.getLeaderBannerInstance(this.registryAccess().lookupOrThrow(Registries.BANNER_PATTERN)));
+ boolean flag = !itemstack.isEmpty() && ItemStack.matches(itemstack, Raid.getLeaderBanner(this.registryAccess().lookupOrThrow(Registries.BANNER_PATTERN))); // Gale - Lithium - cache ominous banner item
boolean flag1 = this.isPatrolLeader();
return flag && flag1;
@@ -224,7 +224,7 @@ public abstract class Raider extends PatrollingMonster {
ItemStack itemstack = item.getItem();
boolean flag = this.hasActiveRaid() && this.getCurrentRaid().getLeader(this.getWave()) != null;
- if (this.hasActiveRaid() && !flag && ItemStack.matches(itemstack, Raid.getLeaderBannerInstance(this.registryAccess().lookupOrThrow(Registries.BANNER_PATTERN)))) {
+ if (this.hasActiveRaid() && !flag && ItemStack.matches(itemstack, Raid.getLeaderBanner(this.registryAccess().lookupOrThrow(Registries.BANNER_PATTERN)))) { // Gale - Lithium - cache ominous banner item
// Paper start - EntityPickupItemEvent fixes
if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityPickupItemEvent(this, item, 0, false).isCancelled()) {
return;
@@ -302,7 +302,7 @@ public abstract class Raider extends PatrollingMonster {
if (!this.mob.level().getGameRules().getBoolean(net.minecraft.world.level.GameRules.RULE_MOBGRIEFING) || !this.mob.canPickUpLoot()) return false; // Paper - respect game and entity rules for picking up items
Raid raid = this.mob.getCurrentRaid();
- if (this.mob.hasActiveRaid() && !this.mob.getCurrentRaid().isOver() && this.mob.canBeLeader() && !ItemStack.matches(this.mob.getItemBySlot(EquipmentSlot.HEAD), Raid.getLeaderBannerInstance(this.mob.registryAccess().lookupOrThrow(Registries.BANNER_PATTERN)))) {
+ if (this.mob.hasActiveRaid() && !this.mob.getCurrentRaid().isOver() && this.mob.canBeLeader() && !ItemStack.matches(this.mob.getItemBySlot(EquipmentSlot.HEAD), Raid.getLeaderBanner(this.mob.registryAccess().lookupOrThrow(Registries.BANNER_PATTERN)))) { // Gale - Lithium - cache ominous banner item
Raider entityraider = raid.getLeader(this.mob.getWave());
if (entityraider == null || !entityraider.isAlive()) {
diff --git a/src/main/java/net/minecraft/world/item/CreativeModeTabs.java b/src/main/java/net/minecraft/world/item/CreativeModeTabs.java
index 3c5f820fb4ee554e94f417a911922af6c4943e3c..509f1fd055fc4e2b50023ef8c29b190c81bca170 100644
--- a/src/main/java/net/minecraft/world/item/CreativeModeTabs.java
+++ b/src/main/java/net/minecraft/world/item/CreativeModeTabs.java
@@ -1103,7 +1103,7 @@ public class CreativeModeTabs {
entries.accept(Items.PURPLE_BANNER);
entries.accept(Items.MAGENTA_BANNER);
entries.accept(Items.PINK_BANNER);
- entries.accept(Raid.getLeaderBannerInstance(displayContext.holders().lookupOrThrow(Registries.BANNER_PATTERN)));
+ entries.accept(Raid.getLeaderBanner(displayContext.holders().lookupOrThrow(Registries.BANNER_PATTERN))); // Gale - Lithium - cache ominous banner item
entries.accept(Items.SKELETON_SKULL);
entries.accept(Items.WITHER_SKELETON_SKULL);
entries.accept(Items.PLAYER_HEAD);