mirror of
https://github.com/Dreeam-qwq/Gale.git
synced 2025-12-19 14:59:29 +00:00
174 lines
13 KiB
Diff
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);
|