Added two TR villagers (#2931)

* Added Tinkerer

* Added registration to tinkerer and lang

* Added electrician
This commit is contained in:
Ayutac 2022-04-28 10:50:35 +02:00 committed by GitHub
parent a6ae3a7984
commit b14a4c72a1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 178 additions and 19 deletions

View file

@ -35,4 +35,25 @@ public class ExceptionUtils {
}
}
public static void requireNonNull(Object obj, String name) {
if (obj == null)
throw new NullPointerException(name + " cannot be null!");
}
public static <T> void requireNonNullEntries(T[] array, String name) {
if (array == null)
return;
for (T obj : array)
if (obj == null)
throw new NullPointerException("No entry of " + name + " can be null!");
}
public static void requireNonNullEntries(Iterable<?> iterable, String name) {
if (iterable == null)
return;
for (Object obj : iterable)
if (obj == null)
throw new NullPointerException("No entry of " + name + " can be null!");
}
}

View file

@ -1,5 +1,7 @@
package reborncore.common.util;
import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import net.minecraft.entity.Entity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemConvertible;
@ -7,19 +9,40 @@ import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.village.TradeOffer;
import net.minecraft.village.TradeOffers;
import net.minecraft.village.VillagerProfession;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
import java.util.Random;
import java.util.stream.Collectors;
public class TradeUtils {
public final class TradeUtils {
private TradeUtils() {/* No instantiation.*/}
public enum Level {
NOVICE, APPRENTICE, JOURNEYMAN, EXPERT, MASTER;
public static TradeOffer create(ItemConvertible item, int price, int count, int maxUses, int experience) {
public static final int SIZE = MASTER.ordinal() + 1;
/**
* The number value of the job level as used internally.
* @return the level of the job as an int
*/
public int asInt() {
return ordinal() + 1; // internally job levels start with 1, but ordinal() starts with 0
}
}
private TradeUtils() {/* No instantiation. */}
public static TradeOffer createSell(ItemConvertible item, int price, int count, int maxUses, int experience) {
return new TradeOffer(new ItemStack(Items.EMERALD, price), new ItemStack(item, count), maxUses, experience, 0.05F);
}
public static TradeOffer createBuy(ItemConvertible item, int price, int count, int maxUses, int experience) {
return new TradeOffer(new ItemStack(item, count), new ItemStack(Items.EMERALD, price), maxUses, experience, 0.05F);
}
@Contract("null -> null; !null -> new")
public static TradeOffer copy(TradeOffer tradeOffer) {
if (tradeOffer == null)
@ -39,4 +62,28 @@ public class TradeUtils {
};
}
public static void registerTradesForLevel(VillagerProfession profession, Level level, boolean replace, TradeOffer... tradeOffers) {
ExceptionUtils.requireNonNull(profession, "profession");
ExceptionUtils.requireNonNull(level, "level");
ExceptionUtils.requireNonNull(tradeOffers, "tradeOffers");
ExceptionUtils.requireNonNullEntries(tradeOffers, "tradeOffers");
Int2ObjectMap<TradeOffers.Factory[]> allTrades = TradeOffers.PROFESSION_TO_LEVELED_TRADE.getOrDefault(profession, new Int2ObjectArrayMap<>(Level.SIZE));
TradeOffers.Factory[] oldLevelTrades = allTrades.getOrDefault(level.asInt(), new TradeOffers.Factory[0]);
TradeOffers.Factory[] newLevelTrades = new TradeOffers.Factory[tradeOffers.length];
newLevelTrades = Arrays.stream(tradeOffers).map(TradeUtils::asFactory).collect(Collectors.toList()).toArray(newLevelTrades);
TradeOffers.Factory[] allLevelTrades;
if (replace)
allLevelTrades = newLevelTrades;
else {
allLevelTrades = new TradeOffers.Factory[oldLevelTrades.length+newLevelTrades.length];
System.arraycopy(oldLevelTrades,0,allLevelTrades,0,oldLevelTrades.length);
System.arraycopy(newLevelTrades,0,allLevelTrades,oldLevelTrades.length,newLevelTrades.length);
}
allTrades.put(level.asInt(), allLevelTrades);
TradeOffers.PROFESSION_TO_LEVELED_TRADE.put(profession, allTrades);
}
}