From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: violetc <58360096+s-yh-china@users.noreply.github.com> Date: Thu, 14 Sep 2023 20:23:03 +0800 Subject: [PATCH] Force Void Trade diff --git a/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java b/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java index e585eca535ceb2ed28334bc3c6949fcb4881a364..7162f7acfdca6985dfdac2661d4e94b1d781a185 100644 --- a/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java +++ b/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java @@ -59,6 +59,7 @@ public abstract class AbstractVillager extends AgeableMob implements InventoryCa @Nullable protected MerchantOffers offers; private final SimpleContainer inventory = new SimpleContainer(8, (org.bukkit.craftbukkit.entity.CraftAbstractVillager) this.getBukkitEntity()); // CraftBukkit add argument + protected boolean voidTrade = false; // Leaves - force void trade public AbstractVillager(EntityType type, Level world) { super(type, world); @@ -149,7 +150,7 @@ public abstract class AbstractVillager extends AgeableMob implements InventoryCa // Paper start @Override public void processTrade(MerchantOffer recipe, @Nullable io.papermc.paper.event.player.PlayerPurchaseEvent event) { // The MerchantRecipe passed in here is the one set by the PlayerPurchaseEvent - if (event == null || event.willIncreaseTradeUses()) { + if (!voidTrade && (event == null || event.willIncreaseTradeUses())) { // Leaves - force void trade recipe.increaseUses(); } if (event == null || event.isRewardingExp()) { @@ -162,7 +163,7 @@ public abstract class AbstractVillager extends AgeableMob implements InventoryCa @Override public void notifyTrade(MerchantOffer offer) { // offer.increaseUses(); // Paper - handled in processTrade - this.ambientSoundTime = -this.getAmbientSoundInterval(); + if (!voidTrade) this.ambientSoundTime = -this.getAmbientSoundInterval(); // Leaves - force void trade // this.rewardTradeXp(offer); // Paper - handled in processTrade if (this.tradingPlayer instanceof ServerPlayer) { CriteriaTriggers.TRADE.trigger((ServerPlayer) this.tradingPlayer, this, offer.getResult()); @@ -180,7 +181,7 @@ public abstract class AbstractVillager extends AgeableMob implements InventoryCa @Override public void notifyTradeUpdated(ItemStack stack) { if (!this.level().isClientSide && this.ambientSoundTime > -this.getAmbientSoundInterval() + 20) { - this.ambientSoundTime = -this.getAmbientSoundInterval(); + if (!voidTrade) this.ambientSoundTime = -this.getAmbientSoundInterval(); // Leaves - force void trade this.playSound(this.getTradeUpdatedSound(!stack.isEmpty()), this.getSoundVolume(), this.getVoicePitch()); } @@ -229,6 +230,7 @@ public abstract class AbstractVillager extends AgeableMob implements InventoryCa } protected void stopTrading() { + this.voidTrade = false; // Leaves - force void trade this.setTradingPlayer((Player) null); } @@ -308,4 +310,10 @@ public abstract class AbstractVillager extends AgeableMob implements InventoryCa public boolean isClientSide() { return this.level().isClientSide; } + + // Leaves start - force void trade + public void setVoidTrade() { + voidTrade = true; + } + // Leaves end - force void trade } diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java index 452caefc36140937f31be7e67c2580970e64626c..957fefdc5d942e647148f5c5b673a942eea18928 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -347,6 +347,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } private void startTrading(Player customer) { + this.voidTrade = false; // Leaves - force void trade this.updateSpecialPrices(customer); this.setTradingPlayer(customer); this.openTradingScreen(customer, this.getDisplayName(), this.getVillagerData().getLevel()); @@ -649,8 +650,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler protected void rewardTradeXp(MerchantOffer offer) { int i = 3 + this.random.nextInt(4); - this.villagerXp += offer.getXp(); - this.lastTradedPlayer = this.getTradingPlayer(); + // Leaves start - force void trade + if (!voidTrade) { + this.villagerXp += offer.getXp(); + this.lastTradedPlayer = this.getTradingPlayer(); + } + // Leaves end - force void trade if (this.shouldIncreaseLevel()) { this.updateMerchantTimer = 40; this.increaseProfessionLevelOnUpdate = true; diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java index 3c2941d799c9acb3dd9e2b67b7092f4bba5ede17..bde29322bb3158ea99333247cf79ab62c311f581 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java @@ -120,6 +120,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill return InteractionResult.sidedSuccess(this.level().isClientSide); } else { if (!this.level().isClientSide) { + this.voidTrade = false; // Leaves - force void trade this.setTradingPlayer(player); this.openTradingScreen(player, this.getDisplayName(), 1); } diff --git a/src/main/java/net/minecraft/world/inventory/MerchantMenu.java b/src/main/java/net/minecraft/world/inventory/MerchantMenu.java index 8eab7596e1f7d1beb9ab0d70d1310d26822262e9..55ae9ccbadeb3bb358dd04aadd7b32b14f5bc96f 100644 --- a/src/main/java/net/minecraft/world/inventory/MerchantMenu.java +++ b/src/main/java/net/minecraft/world/inventory/MerchantMenu.java @@ -26,7 +26,7 @@ public class MerchantMenu extends AbstractContainerMenu { private static final int SELLSLOT2_X = 162; private static final int BUYSLOT_X = 220; private static final int ROW_Y = 37; - private final Merchant trader; + public final Merchant trader; // Leaves - private -> public private final MerchantContainer tradeContainer; private int merchantLevel; private boolean showProgressBar; diff --git a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java index 8c13b0ff5a34a66df0e087320e7bb6542fbf89fd..d9295fb332342f8f77798757e65d7eb2fa6d7a0f 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java @@ -225,6 +225,16 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity { return; } + // Leaves start - force void trade + if (top.leavesmc.leaves.LeavesConfig.forceVoidTrade) { + if (((ServerPlayer) entity1).containerMenu instanceof net.minecraft.world.inventory.MerchantMenu merchantMenu) { + if (merchantMenu.trader instanceof net.minecraft.world.entity.npc.AbstractVillager villager) { + villager.setVoidTrade(); + } + } + } + // Leaves end - force void trade + entity1.setPortalCooldown(); ((ServerPlayer) entity1).connection.teleport(teleEvent.getTo()); TheEndGatewayBlockEntity.triggerCooldown(world, pos, state, blockEntity); // CraftBukkit - call at end of method