mirror of
https://github.com/FabricMC/fabric.git
synced 2025-05-08 20:30:45 -04:00
parent
0eb0bee996
commit
5cbce673b6
18 changed files with 136 additions and 243 deletions
fabric-object-builder-api-v1/src
main
java/net/fabricmc/fabric
resources
testmod/java/net/fabricmc/fabric/test/object/builder
|
@ -105,14 +105,6 @@ public final class TradeOfferHelper {
|
|||
factory.accept(new TradeOfferInternals.WanderingTraderOffersBuilderImpl());
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated This never did anything useful.
|
||||
*/
|
||||
@Deprecated(forRemoval = true)
|
||||
public static void refreshOffers() {
|
||||
TradeOfferInternals.printRefreshOffersWarning();
|
||||
}
|
||||
|
||||
private TradeOfferHelper() {
|
||||
}
|
||||
|
||||
|
|
|
@ -72,7 +72,25 @@ public final class TradeOfferInternals {
|
|||
}
|
||||
|
||||
public static synchronized void registerWanderingTraderOffers(int level, Consumer<List<TradeOffers.Factory>> factory) {
|
||||
registerOffers(TradeOffers.WANDERING_TRADER_TRADES, level, factory);
|
||||
final List<TradeOffers.Factory> list = new ArrayList<>();
|
||||
factory.accept(list);
|
||||
WanderingTraderOffersBuilderImpl.initWanderingTraderTrades();
|
||||
|
||||
Int2ObjectMap<TradeOffers.Factory[]> tradeMap = new Int2ObjectOpenHashMap<>();
|
||||
|
||||
TradeOffers.WANDERING_TRADER_TRADES.forEach(pair -> {
|
||||
tradeMap.put(pair.getRight(), pair.getLeft());
|
||||
});
|
||||
|
||||
registerOffers(tradeMap, level, factory);
|
||||
|
||||
List<Pair<TradeOffers.Factory[], Integer>> tradeList = new ArrayList<>();
|
||||
|
||||
tradeMap.forEach((key, value) -> {
|
||||
tradeList.add(Pair.of(value, key));
|
||||
});
|
||||
|
||||
TradeOffers.WANDERING_TRADER_TRADES = tradeList;
|
||||
}
|
||||
|
||||
// Shared code to register offers for both villagers and wandering traders.
|
||||
|
@ -87,11 +105,6 @@ public final class TradeOfferInternals {
|
|||
leveledTradeMap.put(level, allEntries);
|
||||
}
|
||||
|
||||
public static void printRefreshOffersWarning() {
|
||||
Throwable loggingThrowable = new Throwable();
|
||||
LOGGER.warn("TradeOfferHelper#refreshOffers does not do anything, yet it was called! Stack trace:", loggingThrowable);
|
||||
}
|
||||
|
||||
public static class WanderingTraderOffersBuilderImpl implements TradeOfferHelper.WanderingTraderOffersBuilder {
|
||||
private static final Object2IntMap<Identifier> ID_TO_INDEX = Util.make(new Object2IntOpenHashMap<>(), idToIndex -> {
|
||||
idToIndex.put(BUY_ITEMS_POOL, 0);
|
||||
|
@ -105,8 +118,8 @@ public final class TradeOfferInternals {
|
|||
* Make the trade list modifiable.
|
||||
*/
|
||||
static void initWanderingTraderTrades() {
|
||||
if (!(TradeOffers.REBALANCED_WANDERING_TRADER_TRADES instanceof ArrayList)) {
|
||||
TradeOffers.REBALANCED_WANDERING_TRADER_TRADES = new ArrayList<>(TradeOffers.REBALANCED_WANDERING_TRADER_TRADES);
|
||||
if (!(TradeOffers.WANDERING_TRADER_TRADES instanceof ArrayList)) {
|
||||
TradeOffers.WANDERING_TRADER_TRADES = new ArrayList<>(TradeOffers.WANDERING_TRADER_TRADES);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -121,8 +134,8 @@ public final class TradeOfferInternals {
|
|||
|
||||
Pair<TradeOffers.Factory[], Integer> pool = Pair.of(factories, count);
|
||||
initWanderingTraderTrades();
|
||||
ID_TO_INDEX.put(id, TradeOffers.REBALANCED_WANDERING_TRADER_TRADES.size());
|
||||
TradeOffers.REBALANCED_WANDERING_TRADER_TRADES.add(pool);
|
||||
ID_TO_INDEX.put(id, TradeOffers.WANDERING_TRADER_TRADES.size());
|
||||
TradeOffers.WANDERING_TRADER_TRADES.add(pool);
|
||||
TradeOffers.Factory[] delayedModifications = DELAYED_MODIFICATIONS.remove(id);
|
||||
|
||||
if (delayedModifications != null) addOffersToPool(id, delayedModifications);
|
||||
|
@ -143,9 +156,9 @@ public final class TradeOfferInternals {
|
|||
|
||||
int poolIndex = ID_TO_INDEX.getInt(pool);
|
||||
initWanderingTraderTrades();
|
||||
Pair<TradeOffers.Factory[], Integer> poolPair = TradeOffers.REBALANCED_WANDERING_TRADER_TRADES.get(poolIndex);
|
||||
Pair<TradeOffers.Factory[], Integer> poolPair = TradeOffers.WANDERING_TRADER_TRADES.get(poolIndex);
|
||||
TradeOffers.Factory[] modified = ArrayUtils.addAll(poolPair.getLeft(), factories);
|
||||
TradeOffers.REBALANCED_WANDERING_TRADER_TRADES.set(poolIndex, Pair.of(modified, poolPair.getRight()));
|
||||
TradeOffers.WANDERING_TRADER_TRADES.set(poolIndex, Pair.of(modified, poolPair.getRight()));
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ extendable class net/minecraft/block/entity/BlockEntityType$BlockEntityFactory
|
|||
accessible method net/minecraft/block/entity/BlockEntityType <init> (Lnet/minecraft/block/entity/BlockEntityType$BlockEntityFactory;Ljava/util/Set;)V
|
||||
accessible class net/minecraft/village/TradeOffers$TypeAwareBuyForOneEmeraldFactory
|
||||
mutable field net/minecraft/village/TradeOffers REBALANCED_PROFESSION_TO_LEVELED_TRADE Ljava/util/Map;
|
||||
mutable field net/minecraft/village/TradeOffers REBALANCED_WANDERING_TRADER_TRADES Ljava/util/List;
|
||||
mutable field net/minecraft/village/TradeOffers WANDERING_TRADER_TRADES Ljava/util/List;
|
||||
|
||||
accessible method net/minecraft/entity/SpawnRestriction register (Lnet/minecraft/entity/EntityType;Lnet/minecraft/entity/SpawnLocation;Lnet/minecraft/world/Heightmap$Type;Lnet/minecraft/entity/SpawnRestriction$SpawnPredicate;)V
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@ import static net.minecraft.server.command.CommandManager.literal;
|
|||
import java.util.Optional;
|
||||
|
||||
import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import net.minecraft.component.DataComponentTypes;
|
||||
import net.minecraft.entity.Entity;
|
||||
|
@ -106,8 +107,8 @@ public class VillagerTypeTest1 implements ModInitializer {
|
|||
WanderingTraderEntity trader = (WanderingTraderEntity) entity;
|
||||
trader.getOffers().clear();
|
||||
|
||||
for (TradeOffers.Factory[] value : TradeOffers.WANDERING_TRADER_TRADES.values()) {
|
||||
for (TradeOffers.Factory factory : value) {
|
||||
for (Pair<TradeOffers.Factory[], Integer> value : TradeOffers.WANDERING_TRADER_TRADES) {
|
||||
for (TradeOffers.Factory factory : value.getKey()) {
|
||||
final TradeOffer result = factory.create(trader, Random.create());
|
||||
|
||||
if (result == null) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue