Fix enchantments, item lore handlers, add mob egg drop chance to lore text. Fix mob egg drop rates. Fix player head drop rates
This commit is contained in:
parent
7e1f4eea48
commit
afb21dd2c8
25 changed files with 121 additions and 558 deletions
|
@ -168,6 +168,7 @@ dependencies {
|
||||||
runtimeOnly fg.deobf("curse.maven:mekanism-268560:5125665")
|
runtimeOnly fg.deobf("curse.maven:mekanism-268560:5125665")
|
||||||
runtimeOnly fg.deobf("curse.maven:worldedit-225608:4586218")
|
runtimeOnly fg.deobf("curse.maven:worldedit-225608:4586218")
|
||||||
runtimeOnly fg.deobf("curse.maven:jei-238222:5101366")
|
runtimeOnly fg.deobf("curse.maven:jei-238222:5101366")
|
||||||
|
runtimeOnly fg.deobf("curse.maven:nbtedit-reborn-678133:5082493")
|
||||||
|
|
||||||
// Example mod dependency with JEI - using fg.deobf() ensures the dependency is remapped to your development mappings
|
// Example mod dependency with JEI - using fg.deobf() ensures the dependency is remapped to your development mappings
|
||||||
// The JEI API is declared for compile time use, while the full JEI artifact is used at runtime
|
// The JEI API is declared for compile time use, while the full JEI artifact is used at runtime
|
||||||
|
|
|
@ -48,7 +48,7 @@ mod_name=Thresholds
|
||||||
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
|
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
|
||||||
mod_license=GPLv3
|
mod_license=GPLv3
|
||||||
# The mod version. See https://semver.org/
|
# The mod version. See https://semver.org/
|
||||||
mod_version=1201.4.040124.0234
|
mod_version=1201.4.040124.0514
|
||||||
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
|
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
|
||||||
# This should match the base package used for the mod sources.
|
# This should match the base package used for the mod sources.
|
||||||
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
package dev.zontreck.otemod.blocks.entity;
|
package dev.zontreck.otemod.blocks.entity;
|
||||||
|
|
||||||
|
import dev.zontreck.libzontreck.items.InputItemStackHandler;
|
||||||
|
import dev.zontreck.libzontreck.items.OutputItemStackHandler;
|
||||||
import dev.zontreck.libzontreck.util.ChatHelpers;
|
import dev.zontreck.libzontreck.util.ChatHelpers;
|
||||||
import dev.zontreck.otemod.implementation.OutputItemStackHandler;
|
|
||||||
import dev.zontreck.otemod.implementation.compressor.CompressionChamberMenu;
|
import dev.zontreck.otemod.implementation.compressor.CompressionChamberMenu;
|
||||||
import dev.zontreck.otemod.implementation.energy.IThresholdsEnergy;
|
import dev.zontreck.otemod.implementation.energy.IThresholdsEnergy;
|
||||||
import dev.zontreck.otemod.implementation.energy.OTEEnergy;
|
import dev.zontreck.otemod.implementation.energy.OTEEnergy;
|
||||||
|
@ -19,17 +20,14 @@ import net.minecraft.world.entity.player.Inventory;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.inventory.AbstractContainerMenu;
|
import net.minecraft.world.inventory.AbstractContainerMenu;
|
||||||
import net.minecraft.world.inventory.ContainerData;
|
import net.minecraft.world.inventory.ContainerData;
|
||||||
import net.minecraft.world.inventory.SimpleContainerData;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.Items;
|
import net.minecraft.world.item.Items;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraftforge.common.capabilities.Capability;
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
import net.minecraftforge.common.capabilities.ForgeCapabilities;
|
import net.minecraftforge.common.capabilities.ForgeCapabilities;
|
||||||
import net.minecraftforge.common.util.LazyOptional;
|
import net.minecraftforge.common.util.LazyOptional;
|
||||||
import net.minecraftforge.energy.EnergyStorage;
|
|
||||||
import net.minecraftforge.energy.IEnergyStorage;
|
import net.minecraftforge.energy.IEnergyStorage;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
import net.minecraftforge.items.ItemStackHandler;
|
import net.minecraftforge.items.ItemStackHandler;
|
||||||
|
@ -47,6 +45,8 @@ public class CompressionChamberBlockEntity extends BlockEntity implements MenuPr
|
||||||
super(ModEntities.COMPRESSION_CHAMBER.get(), pPos, pBlockState);
|
super(ModEntities.COMPRESSION_CHAMBER.get(), pPos, pBlockState);
|
||||||
|
|
||||||
outputSlot = new OutputItemStackHandler(outputItems);
|
outputSlot = new OutputItemStackHandler(outputItems);
|
||||||
|
inputSlot = new InputItemStackHandler(itemsHandler);
|
||||||
|
|
||||||
data = new ContainerData() {
|
data = new ContainerData() {
|
||||||
@Override
|
@Override
|
||||||
public int get(int i) {
|
public int get(int i) {
|
||||||
|
@ -91,6 +91,7 @@ public class CompressionChamberBlockEntity extends BlockEntity implements MenuPr
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
private ItemStackHandler outputSlot;
|
private ItemStackHandler outputSlot;
|
||||||
|
private ItemStackHandler inputSlot;
|
||||||
|
|
||||||
private final OTEEnergy ENERGY_STORAGE = new OTEEnergy(ENERGY_REQUIREMENT*3, ENERGY_REQUIREMENT*512) {
|
private final OTEEnergy ENERGY_STORAGE = new OTEEnergy(ENERGY_REQUIREMENT*3, ENERGY_REQUIREMENT*512) {
|
||||||
|
|
||||||
|
@ -148,7 +149,7 @@ public class CompressionChamberBlockEntity extends BlockEntity implements MenuPr
|
||||||
public void onLoad()
|
public void onLoad()
|
||||||
{
|
{
|
||||||
super.onLoad();
|
super.onLoad();
|
||||||
lazyItemHandler = LazyOptional.of(()->itemsHandler);
|
lazyItemHandler = LazyOptional.of(()->inputSlot);
|
||||||
lazyOutputItems = LazyOptional.of(()->outputSlot);
|
lazyOutputItems = LazyOptional.of(()->outputSlot);
|
||||||
lazyEnergyHandler = LazyOptional.of(()->ENERGY_STORAGE);
|
lazyEnergyHandler = LazyOptional.of(()->ENERGY_STORAGE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package dev.zontreck.otemod.blocks.entity;
|
package dev.zontreck.otemod.blocks.entity;
|
||||||
|
|
||||||
import dev.zontreck.otemod.implementation.OutputItemStackHandler;
|
import dev.zontreck.libzontreck.items.InputItemStackHandler;
|
||||||
|
import dev.zontreck.libzontreck.items.OutputItemStackHandler;
|
||||||
import dev.zontreck.otemod.implementation.energy.IThresholdsEnergy;
|
import dev.zontreck.otemod.implementation.energy.IThresholdsEnergy;
|
||||||
import dev.zontreck.otemod.implementation.energy.OTEEnergy;
|
import dev.zontreck.otemod.implementation.energy.OTEEnergy;
|
||||||
import dev.zontreck.otemod.implementation.scrubber.ItemScrubberMenu;
|
import dev.zontreck.otemod.implementation.scrubber.ItemScrubberMenu;
|
||||||
|
@ -58,6 +59,8 @@ public class ItemScrubberBlockEntity extends BlockEntity implements MenuProvider
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
private ItemStackHandler outputSlot;
|
private ItemStackHandler outputSlot;
|
||||||
|
private ItemStackHandler inputSlot;
|
||||||
|
|
||||||
|
|
||||||
private final OTEEnergy ENERGY_STORAGE = new OTEEnergy(ENERGY_REQ*3, ENERGY_REQ+512) {
|
private final OTEEnergy ENERGY_STORAGE = new OTEEnergy(ENERGY_REQ*3, ENERGY_REQ+512) {
|
||||||
|
|
||||||
|
@ -78,6 +81,7 @@ public class ItemScrubberBlockEntity extends BlockEntity implements MenuProvider
|
||||||
public ItemScrubberBlockEntity(BlockPos pos, BlockState state) {
|
public ItemScrubberBlockEntity(BlockPos pos, BlockState state) {
|
||||||
super(ModEntities.ITEM_SCRUBBER.get(), pos, state);
|
super(ModEntities.ITEM_SCRUBBER.get(), pos, state);
|
||||||
outputSlot = new OutputItemStackHandler(outputItems);
|
outputSlot = new OutputItemStackHandler(outputItems);
|
||||||
|
inputSlot = new InputItemStackHandler(itemsHandler);
|
||||||
|
|
||||||
this.data = new ContainerData() {
|
this.data = new ContainerData() {
|
||||||
|
|
||||||
|
@ -148,7 +152,7 @@ public class ItemScrubberBlockEntity extends BlockEntity implements MenuProvider
|
||||||
public void onLoad()
|
public void onLoad()
|
||||||
{
|
{
|
||||||
super.onLoad();
|
super.onLoad();
|
||||||
lazyItemHandler = LazyOptional.of(()->itemsHandler);
|
lazyItemHandler = LazyOptional.of(()->inputSlot);
|
||||||
lazyOutputItems = LazyOptional.of(()->outputSlot);
|
lazyOutputItems = LazyOptional.of(()->outputSlot);
|
||||||
lazyEnergyHandler = LazyOptional.of(()->ENERGY_STORAGE);
|
lazyEnergyHandler = LazyOptional.of(()->ENERGY_STORAGE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
package dev.zontreck.otemod.blocks.entity;
|
package dev.zontreck.otemod.blocks.entity;
|
||||||
|
|
||||||
|
import dev.zontreck.libzontreck.items.InputItemStackHandler;
|
||||||
|
import dev.zontreck.libzontreck.items.OutputItemStackHandler;
|
||||||
import dev.zontreck.libzontreck.util.ItemUtils;
|
import dev.zontreck.libzontreck.util.ItemUtils;
|
||||||
import dev.zontreck.otemod.implementation.OutputItemStackHandler;
|
|
||||||
import dev.zontreck.otemod.implementation.energy.IThresholdsEnergy;
|
import dev.zontreck.otemod.implementation.energy.IThresholdsEnergy;
|
||||||
import dev.zontreck.otemod.implementation.energy.OTEEnergy;
|
import dev.zontreck.otemod.implementation.energy.OTEEnergy;
|
||||||
import dev.zontreck.otemod.implementation.scrubber.MagicalScrubberMenu;
|
import dev.zontreck.otemod.implementation.scrubber.MagicalScrubberMenu;
|
||||||
|
@ -63,6 +64,7 @@ public class MagicalScrubberBlockEntity extends BlockEntity implements MenuProvi
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
private ItemStackHandler outputSlot;
|
private ItemStackHandler outputSlot;
|
||||||
|
private ItemStackHandler inputSlot;
|
||||||
|
|
||||||
private final OTEEnergy ENERGY_STORAGE = new OTEEnergy(ENERGY_REQ*3, ENERGY_REQ+512) {
|
private final OTEEnergy ENERGY_STORAGE = new OTEEnergy(ENERGY_REQ*3, ENERGY_REQ+512) {
|
||||||
|
|
||||||
|
@ -83,6 +85,7 @@ public class MagicalScrubberBlockEntity extends BlockEntity implements MenuProvi
|
||||||
public MagicalScrubberBlockEntity(BlockPos pos, BlockState state) {
|
public MagicalScrubberBlockEntity(BlockPos pos, BlockState state) {
|
||||||
super(ModEntities.MAGICAL_SCRUBBER.get(), pos, state);
|
super(ModEntities.MAGICAL_SCRUBBER.get(), pos, state);
|
||||||
outputSlot = new OutputItemStackHandler(outputItems);
|
outputSlot = new OutputItemStackHandler(outputItems);
|
||||||
|
inputSlot = new InputItemStackHandler(itemsHandler);
|
||||||
|
|
||||||
this.data = new ContainerData() {
|
this.data = new ContainerData() {
|
||||||
|
|
||||||
|
@ -153,7 +156,7 @@ public class MagicalScrubberBlockEntity extends BlockEntity implements MenuProvi
|
||||||
public void onLoad()
|
public void onLoad()
|
||||||
{
|
{
|
||||||
super.onLoad();
|
super.onLoad();
|
||||||
lazyItemHandler = LazyOptional.of(()->itemsHandler);
|
lazyItemHandler = LazyOptional.of(()->inputSlot);
|
||||||
lazyOutputItems = LazyOptional.of(()->outputSlot);
|
lazyOutputItems = LazyOptional.of(()->outputSlot);
|
||||||
lazyEnergyHandler = LazyOptional.of(()->ENERGY_STORAGE);
|
lazyEnergyHandler = LazyOptional.of(()->ENERGY_STORAGE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
package dev.zontreck.otemod.blocks.entity;
|
package dev.zontreck.otemod.blocks.entity;
|
||||||
|
|
||||||
import dev.zontreck.libzontreck.util.ItemUtils;
|
import dev.zontreck.libzontreck.items.InputItemStackHandler;
|
||||||
import dev.zontreck.otemod.implementation.OutputItemStackHandler;
|
import dev.zontreck.libzontreck.items.OutputItemStackHandler;
|
||||||
import dev.zontreck.otemod.implementation.energy.IThresholdsEnergy;
|
import dev.zontreck.otemod.implementation.energy.IThresholdsEnergy;
|
||||||
import dev.zontreck.otemod.implementation.energy.OTEEnergy;
|
import dev.zontreck.otemod.implementation.energy.OTEEnergy;
|
||||||
import dev.zontreck.otemod.implementation.scrubber.MagicalScrubberMenu;
|
|
||||||
import dev.zontreck.otemod.implementation.uncrafting.UncrafterMenu;
|
import dev.zontreck.otemod.implementation.uncrafting.UncrafterMenu;
|
||||||
import dev.zontreck.otemod.items.PartialItem;
|
|
||||||
import dev.zontreck.otemod.networking.ModMessages;
|
import dev.zontreck.otemod.networking.ModMessages;
|
||||||
import dev.zontreck.otemod.networking.packets.EnergySyncS2CPacket;
|
import dev.zontreck.otemod.networking.packets.EnergySyncS2CPacket;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
|
@ -20,16 +18,7 @@ import net.minecraft.world.entity.player.Inventory;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.inventory.AbstractContainerMenu;
|
import net.minecraft.world.inventory.AbstractContainerMenu;
|
||||||
import net.minecraft.world.inventory.ContainerData;
|
import net.minecraft.world.inventory.ContainerData;
|
||||||
import net.minecraft.world.inventory.CraftingContainer;
|
|
||||||
import net.minecraft.world.item.EnchantedBookItem;
|
|
||||||
import net.minecraft.world.item.Item;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.Items;
|
|
||||||
import net.minecraft.world.item.crafting.CraftingRecipe;
|
|
||||||
import net.minecraft.world.item.crafting.Recipe;
|
|
||||||
import net.minecraft.world.item.crafting.RecipeType;
|
|
||||||
import net.minecraft.world.item.enchantment.Enchantment;
|
|
||||||
import net.minecraft.world.item.enchantment.EnchantmentInstance;
|
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
@ -39,7 +28,6 @@ import net.minecraftforge.common.util.LazyOptional;
|
||||||
import net.minecraftforge.energy.IEnergyStorage;
|
import net.minecraftforge.energy.IEnergyStorage;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
import net.minecraftforge.items.ItemStackHandler;
|
import net.minecraftforge.items.ItemStackHandler;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
@ -70,6 +58,7 @@ public class UncrafterBlockEntity extends BlockEntity implements MenuProvider, I
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
private ItemStackHandler outputSlot;
|
private ItemStackHandler outputSlot;
|
||||||
|
private ItemStackHandler inputSlot;
|
||||||
|
|
||||||
private final OTEEnergy ENERGY_STORAGE = new OTEEnergy(ENERGY_REQ*3, ENERGY_REQ+512) {
|
private final OTEEnergy ENERGY_STORAGE = new OTEEnergy(ENERGY_REQ*3, ENERGY_REQ+512) {
|
||||||
|
|
||||||
|
@ -90,6 +79,7 @@ public class UncrafterBlockEntity extends BlockEntity implements MenuProvider, I
|
||||||
public UncrafterBlockEntity(BlockPos pos, BlockState state) {
|
public UncrafterBlockEntity(BlockPos pos, BlockState state) {
|
||||||
super(ModEntities.UNCRAFTER.get(), pos, state);
|
super(ModEntities.UNCRAFTER.get(), pos, state);
|
||||||
outputSlot = new OutputItemStackHandler(outputItems);
|
outputSlot = new OutputItemStackHandler(outputItems);
|
||||||
|
inputSlot = new InputItemStackHandler(itemsHandler);
|
||||||
|
|
||||||
this.data = new ContainerData() {
|
this.data = new ContainerData() {
|
||||||
|
|
||||||
|
@ -160,7 +150,7 @@ public class UncrafterBlockEntity extends BlockEntity implements MenuProvider, I
|
||||||
public void onLoad()
|
public void onLoad()
|
||||||
{
|
{
|
||||||
super.onLoad();
|
super.onLoad();
|
||||||
lazyItemHandler = LazyOptional.of(()->itemsHandler);
|
lazyItemHandler = LazyOptional.of(()->inputSlot);
|
||||||
lazyOutputItems = LazyOptional.of(()->outputSlot);
|
lazyOutputItems = LazyOptional.of(()->outputSlot);
|
||||||
lazyEnergyHandler = LazyOptional.of(()->ENERGY_STORAGE);
|
lazyEnergyHandler = LazyOptional.of(()->ENERGY_STORAGE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,6 +83,7 @@ public class ServerConfig
|
||||||
tag.put(Cooldowns.TAG_NAME, cooldowns.save());
|
tag.put(Cooldowns.TAG_NAME, cooldowns.save());
|
||||||
tag.put(AntiGrief.TAG_NAME, antigrief.save());
|
tag.put(AntiGrief.TAG_NAME, antigrief.save());
|
||||||
tag.put(ChatOverrides.TAG_NAME, chatOverrides.save());
|
tag.put(ChatOverrides.TAG_NAME, chatOverrides.save());
|
||||||
|
tag.put(Drops.TAG_NAME, drops.save());
|
||||||
|
|
||||||
|
|
||||||
return tag;
|
return tag;
|
||||||
|
|
|
@ -10,8 +10,8 @@ public class Drops
|
||||||
public static final String TAG_PLAYER_HEAD_CHANCE = "playerHeadChance";
|
public static final String TAG_PLAYER_HEAD_CHANCE = "playerHeadChance";
|
||||||
|
|
||||||
public boolean enablePlayerHeadChance = true;
|
public boolean enablePlayerHeadChance = true;
|
||||||
public float mobEggingChance = 0.25f;
|
public int mobEggingChance = 5;
|
||||||
public float playerHeadChance=0.5f;
|
public int playerHeadChance=10;
|
||||||
|
|
||||||
|
|
||||||
public CompoundTag save()
|
public CompoundTag save()
|
||||||
|
@ -32,10 +32,10 @@ public class Drops
|
||||||
drops.enablePlayerHeadChance = tag.getBoolean(TAG_PLAYER_HEAD_DROPS);
|
drops.enablePlayerHeadChance = tag.getBoolean(TAG_PLAYER_HEAD_DROPS);
|
||||||
|
|
||||||
if(tag.contains(TAG_SPAWN_EGG_CHANCE))
|
if(tag.contains(TAG_SPAWN_EGG_CHANCE))
|
||||||
drops.mobEggingChance = tag.getFloat(TAG_SPAWN_EGG_CHANCE);
|
drops.mobEggingChance = tag.getInt(TAG_SPAWN_EGG_CHANCE);
|
||||||
|
|
||||||
if(tag.contains(TAG_PLAYER_HEAD_CHANCE))
|
if(tag.contains(TAG_PLAYER_HEAD_CHANCE))
|
||||||
drops.playerHeadChance = tag.getFloat(TAG_PLAYER_HEAD_CHANCE);
|
drops.playerHeadChance = tag.getInt(TAG_PLAYER_HEAD_CHANCE);
|
||||||
|
|
||||||
return drops;
|
return drops;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,8 @@ import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.enchantment.Enchantment;
|
import net.minecraft.world.item.enchantment.Enchantment;
|
||||||
import net.minecraft.world.item.enchantment.EnchantmentCategory;
|
import net.minecraft.world.item.enchantment.EnchantmentCategory;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
public class MobEggEnchantment extends Enchantment
|
public class MobEggEnchantment extends Enchantment
|
||||||
{
|
{
|
||||||
public static final String TAG_BIAS = "mob_egging_bias";
|
public static final String TAG_BIAS = "mob_egging_bias";
|
||||||
|
@ -59,17 +61,27 @@ public class MobEggEnchantment extends Enchantment
|
||||||
|
|
||||||
public static boolean givesEgg(int level, int bias)
|
public static boolean givesEgg(int level, int bias)
|
||||||
{
|
{
|
||||||
double CHANCE = ServerConfig.drops.mobEggingChance * 100;
|
int CHANCE = ServerConfig.drops.mobEggingChance;
|
||||||
|
|
||||||
CHANCE *= (level / 0.5);
|
CHANCE += level;
|
||||||
CHANCE += bias;
|
CHANCE += bias;
|
||||||
|
|
||||||
double rng = Math.random()*100000;
|
|
||||||
|
|
||||||
if(ServerConfig.general.debug)
|
if(ServerConfig.general.debug)
|
||||||
{
|
{
|
||||||
OTEMod.LOGGER.info("Spawn Egg Chance (" + CHANCE + ") [" + rng + "]");
|
OTEMod.LOGGER.info("Spawn Egg Chance (" + CHANCE + ")");
|
||||||
}
|
}
|
||||||
return (rng <= CHANCE);
|
return rollChance((int)CHANCE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean rollChance(int percent)
|
||||||
|
{
|
||||||
|
Random rng = new Random();
|
||||||
|
int test = rng.nextInt(100) + 1;
|
||||||
|
if(ServerConfig.general.debug)
|
||||||
|
{
|
||||||
|
OTEMod.LOGGER.info("Spawn Egg Dice Roll (" + test + " / " + percent + ")");
|
||||||
|
}
|
||||||
|
|
||||||
|
return test <= percent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,25 +1,14 @@
|
||||||
package dev.zontreck.otemod.entities;
|
package dev.zontreck.otemod.entities;
|
||||||
|
|
||||||
import dev.zontreck.otemod.OTEMod;
|
import dev.zontreck.otemod.OTEMod;
|
||||||
import dev.zontreck.otemod.entities.monsters.PossumEntity;
|
|
||||||
import dev.zontreck.otemod.items.ThrownMobCaptureBall;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import net.minecraft.world.entity.Entity;
|
|
||||||
import net.minecraft.world.entity.EntityType;
|
import net.minecraft.world.entity.EntityType;
|
||||||
import net.minecraft.world.entity.MobCategory;
|
|
||||||
import net.minecraft.world.entity.projectile.Snowball;
|
|
||||||
import net.minecraft.world.entity.projectile.ThrowableItemProjectile;
|
|
||||||
import net.minecraftforge.eventbus.api.IEventBus;
|
import net.minecraftforge.eventbus.api.IEventBus;
|
||||||
import net.minecraftforge.registries.DeferredRegister;
|
import net.minecraftforge.registries.DeferredRegister;
|
||||||
import net.minecraftforge.registries.ForgeRegistries;
|
import net.minecraftforge.registries.ForgeRegistries;
|
||||||
import net.minecraftforge.registries.RegistryObject;
|
|
||||||
|
|
||||||
public class ModEntityTypes {
|
public class ModEntityTypes {
|
||||||
public static final DeferredRegister<EntityType<?>> ENTITIES = DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, OTEMod.MOD_ID);
|
public static final DeferredRegister<EntityType<?>> ENTITIES = DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, OTEMod.MOD_ID);
|
||||||
|
|
||||||
//public static final RegistryObject<EntityType<? extends PossumEntity>> POSSUM = ENTITIES.register("possum", ()-> EntityType.Builder.of(PossumEntity::new, MobCategory.CREATURE).sized(1.5f, 0.5f).build(new ResourceLocation(OTEMod.MOD_ID, "possum").toString()));
|
|
||||||
|
|
||||||
|
|
||||||
private static EntityType registerEntity(EntityType.Builder builder, String entityName) {
|
private static EntityType registerEntity(EntityType.Builder builder, String entityName) {
|
||||||
return builder.build(entityName);
|
return builder.build(entityName);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,59 +0,0 @@
|
||||||
package dev.zontreck.otemod.entities.monsters;
|
|
||||||
|
|
||||||
|
|
||||||
public class PossumEntity
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
public PossumEntity(EntityType<? extends Animal> pEntityType, Level pLevel) {
|
|
||||||
super(pEntityType, pLevel);
|
|
||||||
//TODO Auto-generated constructor stub
|
|
||||||
}
|
|
||||||
|
|
||||||
private AnimationFactory factory = GeckoLibUtil.createFactory(this);
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AnimationFactory getFactory() {
|
|
||||||
return factory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PossumEntity getBreedOffspring(ServerLevel pLevel, AgeableMob pOtherParent) {
|
|
||||||
return (PossumEntity) ModEntityTypes.POSSUM.get().create(pLevel);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isFood(ItemStack pStack)
|
|
||||||
{
|
|
||||||
return pStack.is(Items.APPLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static AttributeSupplier createAttributes() {
|
|
||||||
return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 12.0D).add(Attributes.MOVEMENT_SPEED, (double)0.2F).build();
|
|
||||||
}
|
|
||||||
|
|
||||||
private <E extends IAnimatable> PlayState predicate(AnimationEvent<E> ev)
|
|
||||||
{
|
|
||||||
if(ev.isMoving())
|
|
||||||
{
|
|
||||||
// change anim
|
|
||||||
return PlayState.CONTINUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
ev.getController().setAnimation(new AnimationBuilder().addAnimation("animation.model.idle", ILoopType.EDefaultLoopTypes.LOOP));
|
|
||||||
return PlayState.CONTINUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void registerControllers(AnimationData data) {
|
|
||||||
data.addAnimationController(new AnimationController<IAnimatable>(this, "controller", 0, this::predicate));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void registerGoals()
|
|
||||||
{
|
|
||||||
this.goalSelector.addGoal(0, new FloatGoal(this));
|
|
||||||
this.goalSelector.addGoal(1, new WaterAvoidingRandomStrollGoal(this, 1));
|
|
||||||
}*/
|
|
||||||
}
|
|
|
@ -1,22 +0,0 @@
|
||||||
package dev.zontreck.otemod.entities.monsters.client;
|
|
||||||
|
|
||||||
|
|
||||||
public class PossumModel
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
@Override
|
|
||||||
public ResourceLocation getAnimationFileLocation(PossumEntity animatable) {
|
|
||||||
return new ResourceLocation(OTEMod.MOD_ID, "animations/possum.animation.json");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ResourceLocation getModelLocation(PossumEntity object) {
|
|
||||||
return new ResourceLocation(OTEMod.MOD_ID, "geo/possum.geo.json");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ResourceLocation getTextureLocation(PossumEntity object) {
|
|
||||||
return new ResourceLocation(OTEMod.MOD_ID, "textures/entity/possum_texture.png");
|
|
||||||
}*/
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
package dev.zontreck.otemod.entities.monsters.client;
|
|
||||||
|
|
||||||
|
|
||||||
public class PossumRenderer
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
public PossumRenderer(EntityRendererProvider.Context renderManager) {
|
|
||||||
super(renderManager, new PossumModel());
|
|
||||||
this.shadowRadius=0.3f;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ResourceLocation getTextureLocation(PossumEntity entity)
|
|
||||||
{
|
|
||||||
|
|
||||||
return new ResourceLocation(OTEMod.MOD_ID, "textures/entity/possum_texture.png");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RenderType getRenderType(PossumEntity animatable, float partialTicks,
|
|
||||||
PoseStack stack, MultiBufferSource buffer,
|
|
||||||
VertexConsumer consumer, int packed, ResourceLocation loc)
|
|
||||||
{
|
|
||||||
return super.getRenderType(animatable, partialTicks, stack, buffer, consumer, packed, loc);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
|
@ -17,6 +17,7 @@ import dev.zontreck.otemod.enchantments.ModEnchantments;
|
||||||
import dev.zontreck.otemod.implementation.DeathMessages;
|
import dev.zontreck.otemod.implementation.DeathMessages;
|
||||||
import dev.zontreck.otemod.implementation.InventoryBackup;
|
import dev.zontreck.otemod.implementation.InventoryBackup;
|
||||||
import dev.zontreck.otemod.implementation.Messages;
|
import dev.zontreck.otemod.implementation.Messages;
|
||||||
|
import dev.zontreck.otemod.items.tags.ItemStatType;
|
||||||
import dev.zontreck.otemod.registry.ModDimensions;
|
import dev.zontreck.otemod.registry.ModDimensions;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
|
@ -28,6 +29,7 @@ import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraft.world.entity.item.ItemEntity;
|
import net.minecraft.world.entity.item.ItemEntity;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.item.SpawnEggItem;
|
||||||
import net.minecraft.world.item.enchantment.Enchantments;
|
import net.minecraft.world.item.enchantment.Enchantments;
|
||||||
import net.minecraft.world.level.GameType;
|
import net.minecraft.world.level.GameType;
|
||||||
import net.minecraftforge.common.ForgeSpawnEggItem;
|
import net.minecraftforge.common.ForgeSpawnEggItem;
|
||||||
|
@ -73,12 +75,11 @@ public class EventHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate chance
|
// Calculate chance
|
||||||
double base_chance = ServerConfig.drops.playerHeadChance;
|
double base_chance = (ServerConfig.drops.playerHeadChance * 100);
|
||||||
base_chance += looting;
|
base_chance += looting;
|
||||||
base_chance *= 100;
|
|
||||||
|
|
||||||
Random rng = new Random();
|
Random rng = new Random();
|
||||||
double num = rng.nextDouble(0,100000);
|
int num = rng.nextInt(100) + 1;
|
||||||
if(num <= base_chance)
|
if(num <= base_chance)
|
||||||
{
|
{
|
||||||
ItemStack head = HeadUtilities.get(profile.username, "").setHoverName(ChatHelpers.macro(profile.nickname+"'s Head"));
|
ItemStack head = HeadUtilities.get(profile.username, "").setHoverName(ChatHelpers.macro(profile.nickname+"'s Head"));
|
||||||
|
@ -160,9 +161,13 @@ public class EventHandler {
|
||||||
// Check enchantment level for looting
|
// Check enchantment level for looting
|
||||||
int level = ItemUtils.getEnchantmentLevel (Enchantments.MOB_LOOTING,stack);
|
int level = ItemUtils.getEnchantmentLevel (Enchantments.MOB_LOOTING,stack);
|
||||||
if(level==3){
|
if(level==3){
|
||||||
ItemStack egg = new ItemStack(ForgeSpawnEggItem.fromEntityType(killed.getType()));
|
ItemStack egg = new ItemStack(
|
||||||
|
ForgeSpawnEggItem.fromEntityType(killed.getType())
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
ev.getDrops().add(new ItemEntity(killed.level(), killed.getX(), killed.getY(), killed.getZ(), egg));
|
ev.getDrops().add(new ItemEntity(killed.level(), killed.getX(), killed.getY(), killed.getZ(), egg));
|
||||||
//LoreHandlers.updateItem(stack, ItemStatType.EGGING);
|
LoreHandlers.updateItem(stack, ItemStatType.EGGING);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
bias += 1;
|
bias += 1;
|
||||||
|
|
|
@ -3,7 +3,11 @@ package dev.zontreck.otemod.events;
|
||||||
import dev.zontreck.libzontreck.lore.LoreContainer;
|
import dev.zontreck.libzontreck.lore.LoreContainer;
|
||||||
import dev.zontreck.libzontreck.lore.LoreEntry;
|
import dev.zontreck.libzontreck.lore.LoreEntry;
|
||||||
import dev.zontreck.libzontreck.util.ChatHelpers;
|
import dev.zontreck.libzontreck.util.ChatHelpers;
|
||||||
|
import dev.zontreck.libzontreck.util.ItemUtils;
|
||||||
import dev.zontreck.otemod.OTEMod;
|
import dev.zontreck.otemod.OTEMod;
|
||||||
|
import dev.zontreck.otemod.configs.snbt.ServerConfig;
|
||||||
|
import dev.zontreck.otemod.enchantments.MobEggEnchantment;
|
||||||
|
import dev.zontreck.otemod.enchantments.ModEnchantments;
|
||||||
import dev.zontreck.otemod.items.tags.ItemStatTag;
|
import dev.zontreck.otemod.items.tags.ItemStatTag;
|
||||||
import dev.zontreck.otemod.items.tags.ItemStatType;
|
import dev.zontreck.otemod.items.tags.ItemStatType;
|
||||||
import dev.zontreck.otemod.items.tags.ItemStatistics;
|
import dev.zontreck.otemod.items.tags.ItemStatistics;
|
||||||
|
@ -75,7 +79,7 @@ public class LoreHandlers {
|
||||||
{
|
{
|
||||||
if(bs.is(Blocks.DIRT) || bs.is(Blocks.GRASS_BLOCK))
|
if(bs.is(Blocks.DIRT) || bs.is(Blocks.GRASS_BLOCK))
|
||||||
{
|
{
|
||||||
OTEMod.LOGGER.info("DIRT!");
|
//OTEMod.LOGGER.info("DIRT!");
|
||||||
updateItem(itemUsed, ItemStatType.HOE);
|
updateItem(itemUsed, ItemStatType.HOE);
|
||||||
}
|
}
|
||||||
} else if(sName.contains("shovel"))
|
} else if(sName.contains("shovel"))
|
||||||
|
@ -98,7 +102,7 @@ public class LoreHandlers {
|
||||||
{
|
{
|
||||||
// Check the entity right-clicked, and the item in hand
|
// Check the entity right-clicked, and the item in hand
|
||||||
|
|
||||||
OTEMod.LOGGER.info("Success");
|
//OTEMod.LOGGER.info("Success");
|
||||||
ServerPlayer sp = (ServerPlayer)ev.getEntity();
|
ServerPlayer sp = (ServerPlayer)ev.getEntity();
|
||||||
ItemStack itemUsed = sp.getMainHandItem();
|
ItemStack itemUsed = sp.getMainHandItem();
|
||||||
Entity target = ev.getTarget();
|
Entity target = ev.getTarget();
|
||||||
|
@ -149,6 +153,10 @@ public class LoreHandlers {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(ItemUtils.getEnchantmentLevel(ModEnchantments.MOB_EGGING_ENCHANTMENT.get(), weaponUsed) > 0) {
|
||||||
|
updateItem(weaponUsed, ItemStatType.EGG_CHANCE);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only valid to be used by OTEMod
|
// Only valid to be used by OTEMod
|
||||||
|
@ -159,31 +167,59 @@ public class LoreHandlers {
|
||||||
|
|
||||||
// Update the mob kill count
|
// Update the mob kill count
|
||||||
CompoundTag props = weaponUsed.getTag();
|
CompoundTag props = weaponUsed.getTag();
|
||||||
if(props==null)props=new CompoundTag();
|
if(props==null){
|
||||||
CompoundTag container = props.getCompound(ItemStatTag.STATS_TAG+"_"+type.name().toLowerCase());
|
props=new CompoundTag();
|
||||||
|
weaponUsed.setTag(props);
|
||||||
|
}
|
||||||
|
String tagName = ItemStatTag.STATS_TAG + "_" + type.name().toLowerCase();
|
||||||
|
CompoundTag container = new CompoundTag();
|
||||||
|
if(!props.contains(tagName))
|
||||||
|
{
|
||||||
|
props.put(tagName, container);
|
||||||
|
}else container = props.getCompound(ItemStatTag.STATS_TAG+"_"+type.name().toLowerCase());
|
||||||
LoreContainer contain = new LoreContainer(weaponUsed);
|
LoreContainer contain = new LoreContainer(weaponUsed);
|
||||||
|
|
||||||
ItemStatTag isTag;
|
ItemStatTag isTag;
|
||||||
try{
|
try{
|
||||||
isTag = new ItemStatTag(type, container.getInt(ItemStatTag.STATS_TAG+"_"+type.name().toLowerCase()));
|
isTag = new ItemStatTag(type, (container.contains("pos") ? container.getInt("pos") : contain.miscData.loreData.size()), container.getInt("value"));
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
isTag = new ItemStatTag(type, 0);
|
isTag = new ItemStatTag(type, contain.miscData.loreData.size(), 0);
|
||||||
}
|
}
|
||||||
isTag.increment();
|
if(type == ItemStatType.EGG_CHANCE)
|
||||||
|
{
|
||||||
|
int bias = weaponUsed.getTag().getInt(MobEggEnchantment.TAG_BIAS);
|
||||||
|
int level = ItemUtils.getEnchantmentLevel(ModEnchantments.MOB_EGGING_ENCHANTMENT.get(), weaponUsed);
|
||||||
|
|
||||||
|
double percent = ((ServerConfig.drops.mobEggingChance) + (level + bias));
|
||||||
|
|
||||||
|
isTag.setValue((int)percent);
|
||||||
|
}else isTag.increment();
|
||||||
LoreEntry entry;
|
LoreEntry entry;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(contain.miscData.loreData.size()==0)
|
if(contain.miscData.loreData.size()==0)
|
||||||
{
|
{
|
||||||
// Missing entry
|
// Missing entry
|
||||||
entry = new LoreEntry.Builder().text(ItemStatistics.makeText(isTag)).build();
|
entry = new LoreEntry.Builder().text(ItemStatistics.makeText(isTag)).build();
|
||||||
contain.miscData.loreData.add(entry);
|
contain.miscData.loreData.add(entry);
|
||||||
}else {
|
}else {
|
||||||
entry = contain.miscData.loreData.get(0); // Stat is set at 0
|
if(contain.miscData.loreData.size() == isTag.tagPosition)
|
||||||
entry.text = ItemStatistics.makeText(isTag);
|
{
|
||||||
|
entry = new LoreEntry.Builder().text(ItemStatistics.makeText(isTag)).build();
|
||||||
|
contain.miscData.loreData.add(entry);
|
||||||
|
}else {
|
||||||
|
entry = contain.miscData.loreData.get(isTag.tagPosition); // Stat is set at 0
|
||||||
|
entry.text = ItemStatistics.makeText(isTag);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update item
|
// Update item
|
||||||
contain.commitLore();
|
contain.commitLore();
|
||||||
|
container.putInt("pos", isTag.tagPosition);
|
||||||
|
container.putInt("value", isTag.value);
|
||||||
|
weaponUsed.setTag(props);
|
||||||
}catch(Exception e)
|
}catch(Exception e)
|
||||||
{
|
{
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
|
@ -1,10 +1,6 @@
|
||||||
package dev.zontreck.otemod.events;
|
package dev.zontreck.otemod.events;
|
||||||
|
|
||||||
import dev.zontreck.otemod.OTEMod;
|
import dev.zontreck.otemod.OTEMod;
|
||||||
import dev.zontreck.otemod.entities.ModEntityTypes;
|
|
||||||
import dev.zontreck.otemod.entities.monsters.PossumEntity;
|
|
||||||
import net.minecraft.world.entity.EntityType;
|
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
|
||||||
import net.minecraftforge.event.entity.EntityAttributeCreationEvent;
|
import net.minecraftforge.event.entity.EntityAttributeCreationEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
package dev.zontreck.otemod.implementation;
|
|
||||||
|
|
||||||
import net.minecraft.core.NonNullList;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
import net.minecraftforge.items.ItemStackHandler;
|
|
||||||
|
|
||||||
public class OutputItemStackHandler extends ItemStackHandler {
|
|
||||||
private final ItemStackHandler internalSlot;
|
|
||||||
|
|
||||||
public OutputItemStackHandler(ItemStackHandler hidden) {
|
|
||||||
super();
|
|
||||||
internalSlot = hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setSize(int size) {
|
|
||||||
stacks = NonNullList.<ItemStack>withSize(size, ItemStack.EMPTY);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setStackInSlot(int slot, ItemStack stack) {
|
|
||||||
internalSlot.setStackInSlot(slot, stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getSlots() {
|
|
||||||
return internalSlot.getSlots();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getStackInSlot(int slot) {
|
|
||||||
return internalSlot.getStackInSlot(slot);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) {
|
|
||||||
return stack;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack extractItem(int slot, int amount, boolean simulate) {
|
|
||||||
return internalSlot.extractItem(slot, amount, simulate);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -16,14 +16,10 @@ public class ModItems {
|
||||||
|
|
||||||
public static final RegistryObject<Item> IHAN_CRYSTAL = CreativeModeTabs.addToOTEModTab(ITEMS.register("ihan_crystal", () -> new IhanCrystal()));
|
public static final RegistryObject<Item> IHAN_CRYSTAL = CreativeModeTabs.addToOTEModTab(ITEMS.register("ihan_crystal", () -> new IhanCrystal()));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static final RegistryObject<Item> ETERNIUM_RAW_ORE = CreativeModeTabs.addToOTEModTab(ITEMS.register("eternium_ore", () -> new Item(new Item.Properties())));
|
public static final RegistryObject<Item> ETERNIUM_RAW_ORE = CreativeModeTabs.addToOTEModTab(ITEMS.register("eternium_ore", () -> new Item(new Item.Properties())));
|
||||||
|
|
||||||
public static final RegistryObject<Item> ETERNIUM_INGOT = CreativeModeTabs.addToOTEModTab(ITEMS.register("eternium_ingot", ()-> new SimpleFoiledItem(new Item.Properties())));
|
public static final RegistryObject<Item> ETERNIUM_INGOT = CreativeModeTabs.addToOTEModTab(ITEMS.register("eternium_ingot", ()-> new SimpleFoiledItem(new Item.Properties())));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static final RegistryObject<Item> MELTED_ENDER_PEARL = CreativeModeTabs.addToOTEModTab(ITEMS.register("melted_ender_pearl", () -> new SimpleFoiledItem(new Item.Properties().stacksTo(64))));
|
public static final RegistryObject<Item> MELTED_ENDER_PEARL = CreativeModeTabs.addToOTEModTab(ITEMS.register("melted_ender_pearl", () -> new SimpleFoiledItem(new Item.Properties().stacksTo(64))));
|
||||||
public static final RegistryObject<Item> SINGULARITY = CreativeModeTabs.addToOTEModTab(ITEMS.register("singularity", () -> new UnstableSingularity(new Item.Properties().stacksTo(1))));
|
public static final RegistryObject<Item> SINGULARITY = CreativeModeTabs.addToOTEModTab(ITEMS.register("singularity", () -> new UnstableSingularity(new Item.Properties().stacksTo(1))));
|
||||||
|
|
||||||
|
|
|
@ -5,12 +5,14 @@ import net.minecraft.nbt.CompoundTag;
|
||||||
public class ItemStatTag {
|
public class ItemStatTag {
|
||||||
public static final String STATS_TAG = "stat";
|
public static final String STATS_TAG = "stat";
|
||||||
public ItemStatType type;
|
public ItemStatType type;
|
||||||
|
public int tagPosition;
|
||||||
public int value;
|
public int value;
|
||||||
|
|
||||||
public ItemStatTag(ItemStatType t, int tag)
|
public ItemStatTag(ItemStatType t, int tagPos, int tag)
|
||||||
{
|
{
|
||||||
type = t;
|
type = t;
|
||||||
value = tag;
|
value = tag;
|
||||||
|
tagPosition = tagPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void increment(){
|
public void increment(){
|
||||||
|
@ -21,6 +23,11 @@ public class ItemStatTag {
|
||||||
value--;
|
value--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setValue(int value)
|
||||||
|
{
|
||||||
|
this.value=value;
|
||||||
|
}
|
||||||
|
|
||||||
public void save(CompoundTag tag)
|
public void save(CompoundTag tag)
|
||||||
{
|
{
|
||||||
tag.putInt(STATS_TAG+"_"+type.name().toLowerCase(), value);
|
tag.putInt(STATS_TAG+"_"+type.name().toLowerCase(), value);
|
||||||
|
|
|
@ -9,5 +9,6 @@ public enum ItemStatType {
|
||||||
SHOVELPATH,
|
SHOVELPATH,
|
||||||
HOE,
|
HOE,
|
||||||
SHEARS,
|
SHEARS,
|
||||||
EGGING
|
EGGING,
|
||||||
|
EGG_CHANCE
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ public class ItemStatistics {
|
||||||
public static String makeText(ItemStatType type, int val)
|
public static String makeText(ItemStatType type, int val)
|
||||||
{
|
{
|
||||||
String lore = ChatColor.doColors("!White!");
|
String lore = ChatColor.doColors("!White!");
|
||||||
|
String sAppend = "";
|
||||||
switch(type)
|
switch(type)
|
||||||
{
|
{
|
||||||
case SWORD -> {
|
case SWORD -> {
|
||||||
|
@ -38,10 +39,14 @@ public class ItemStatistics {
|
||||||
lore += "Sheep Shaved: ";
|
lore += "Sheep Shaved: ";
|
||||||
}
|
}
|
||||||
case EGGING -> {
|
case EGGING -> {
|
||||||
lore += "Mobs Egged: ";
|
lore += "Spawn Eggs Dropped: ";
|
||||||
|
}
|
||||||
|
case EGG_CHANCE -> {
|
||||||
|
lore += "Spawn Egg Chance: ";
|
||||||
|
sAppend = "!White!%";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lore += ChatColor.doColors("!Green!"+val);
|
lore += ChatColor.doColors("!Green!"+val + sAppend);
|
||||||
return lore;
|
return lore;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
{
|
|
||||||
"format_version": "1.8.0",
|
|
||||||
"animations": {
|
|
||||||
"animation.model.idle": {
|
|
||||||
"loop": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"geckolib_format_version": 2
|
|
||||||
}
|
|
|
@ -1,321 +0,0 @@
|
||||||
{
|
|
||||||
"format_version": "1.12.0",
|
|
||||||
"minecraft:geometry": [
|
|
||||||
{
|
|
||||||
"description": {
|
|
||||||
"identifier": "geometry.unknown",
|
|
||||||
"texture_width": 64,
|
|
||||||
"texture_height": 64,
|
|
||||||
"visible_bounds_width": 3,
|
|
||||||
"visible_bounds_height": 2.5,
|
|
||||||
"visible_bounds_offset": [0, 0.75, 0]
|
|
||||||
},
|
|
||||||
"bones": [
|
|
||||||
{
|
|
||||||
"name": "tail",
|
|
||||||
"pivot": [5, 1, 10],
|
|
||||||
"cubes": [
|
|
||||||
{
|
|
||||||
"origin": [-7, 5, 1],
|
|
||||||
"size": [2, 1, 2],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [42, 57], "uv_size": [5, 5]},
|
|
||||||
"east": {"uv": [28, 58], "uv_size": [5, 6]},
|
|
||||||
"south": {"uv": [20, 58], "uv_size": [6, 6]},
|
|
||||||
"west": {"uv": [13, 59], "uv_size": [5, 5]},
|
|
||||||
"up": {"uv": [6, 59], "uv_size": [7, 5]},
|
|
||||||
"down": {"uv": [0, 64], "uv_size": [6, -5]}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"origin": [-7, 4, 2],
|
|
||||||
"size": [2, 1, 1],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [31, 59], "uv_size": [5, 5]},
|
|
||||||
"east": {"uv": [25, 58], "uv_size": [4, 6]},
|
|
||||||
"south": {"uv": [19, 58], "uv_size": [6, 6]},
|
|
||||||
"west": {"uv": [13, 59], "uv_size": [5, 5]},
|
|
||||||
"up": {"uv": [6, 59], "uv_size": [7, 5]},
|
|
||||||
"down": {"uv": [0, 64], "uv_size": [6, -5]}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"origin": [-7, 2, -1],
|
|
||||||
"size": [1, 1, 2],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [59, 56], "uv_size": [4, 5]},
|
|
||||||
"east": {"uv": [22, 58], "uv_size": [5, 6]},
|
|
||||||
"south": {"uv": [16, 58], "uv_size": [5, 6]},
|
|
||||||
"west": {"uv": [11, 59], "uv_size": [5, 5]},
|
|
||||||
"up": {"uv": [5, 59], "uv_size": [6, 5]},
|
|
||||||
"down": {"uv": [0, 64], "uv_size": [5, -5]}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"origin": [-7, 1, -2],
|
|
||||||
"size": [2, 1, 2],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [36, 55], "uv_size": [5, 5]},
|
|
||||||
"east": {"uv": [27, 58], "uv_size": [5, 6]},
|
|
||||||
"south": {"uv": [20, 58], "uv_size": [6, 6]},
|
|
||||||
"west": {"uv": [13, 59], "uv_size": [6, 5]},
|
|
||||||
"up": {"uv": [6, 59], "uv_size": [7, 5]},
|
|
||||||
"down": {"uv": [0, 64], "uv_size": [6, -5]}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"origin": [-6, 2, -2],
|
|
||||||
"size": [1, 1, 2],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [36, 58], "uv_size": [4, 5]},
|
|
||||||
"east": {"uv": [24, 58], "uv_size": [5, 6]},
|
|
||||||
"south": {"uv": [19, 58], "uv_size": [5, 6]},
|
|
||||||
"west": {"uv": [11, 59], "uv_size": [6, 5]},
|
|
||||||
"up": {"uv": [5, 59], "uv_size": [6, 5]},
|
|
||||||
"down": {"uv": [0, 64], "uv_size": [5, -5]}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"origin": [-7, 1, -3],
|
|
||||||
"size": [2, 1, 1],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [32, 58], "uv_size": [5, 5]},
|
|
||||||
"east": {"uv": [25, 58], "uv_size": [4, 6]},
|
|
||||||
"south": {"uv": [18, 58], "uv_size": [6, 6]},
|
|
||||||
"west": {"uv": [13, 60], "uv_size": [4, 4]},
|
|
||||||
"up": {"uv": [6, 60], "uv_size": [7, 4]},
|
|
||||||
"down": {"uv": [0, 64], "uv_size": [6, -4]}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"origin": [-8, 3, 0],
|
|
||||||
"size": [1, 2, 2],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [48, 58], "uv_size": [4, 6]},
|
|
||||||
"east": {"uv": [25, 57], "uv_size": [5, 7]},
|
|
||||||
"south": {"uv": [18, 57], "uv_size": [5, 7]},
|
|
||||||
"west": {"uv": [11, 59], "uv_size": [5, 5]},
|
|
||||||
"up": {"uv": [5, 59], "uv_size": [6, 5]},
|
|
||||||
"down": {"uv": [0, 64], "uv_size": [5, -5]}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"origin": [-7, 3, 1],
|
|
||||||
"size": [1, 2, 1],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [30, 57], "uv_size": [4, 6]},
|
|
||||||
"east": {"uv": [23, 57], "uv_size": [4, 7]},
|
|
||||||
"south": {"uv": [17, 57], "uv_size": [5, 7]},
|
|
||||||
"west": {"uv": [11, 60], "uv_size": [4, 4]},
|
|
||||||
"up": {"uv": [5, 60], "uv_size": [6, 4]},
|
|
||||||
"down": {"uv": [0, 64], "uv_size": [5, -4]}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"origin": [-7, 3, -1],
|
|
||||||
"size": [2, 2, 2],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [34, 57], "uv_size": [5, 6]},
|
|
||||||
"east": {"uv": [26, 57], "uv_size": [5, 7]},
|
|
||||||
"south": {"uv": [19, 57], "uv_size": [6, 7]},
|
|
||||||
"west": {"uv": [13, 59], "uv_size": [5, 5]},
|
|
||||||
"up": {"uv": [6, 59], "uv_size": [7, 5]},
|
|
||||||
"down": {"uv": [0, 64], "uv_size": [6, -5]}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"origin": [-9, 2, -2],
|
|
||||||
"size": [2, 2, 2],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [33, 57], "uv_size": [5, 6]},
|
|
||||||
"east": {"uv": [25, 57], "uv_size": [5, 7]},
|
|
||||||
"south": {"uv": [18, 57], "uv_size": [6, 7]},
|
|
||||||
"west": {"uv": [12, 59], "uv_size": [5, 5]},
|
|
||||||
"up": {"uv": [6, 59], "uv_size": [7, 5]},
|
|
||||||
"down": {"uv": [0, 64], "uv_size": [6, -5]}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"origin": [-7, 2, -3],
|
|
||||||
"size": [1, 1, 2],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [29, 56], "uv_size": [4, 5]},
|
|
||||||
"east": {"uv": [21, 58], "uv_size": [5, 6]},
|
|
||||||
"south": {"uv": [13, 58], "uv_size": [5, 6]},
|
|
||||||
"west": {"uv": [3, 59], "uv_size": [5, 5]},
|
|
||||||
"up": {"uv": [5, 59], "uv_size": [6, 5]},
|
|
||||||
"down": {"uv": [0, 64], "uv_size": [5, -5]}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"origin": [-8, 1, -6],
|
|
||||||
"size": [1, 1, 2],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [34, 56], "uv_size": [4, 5]},
|
|
||||||
"east": {"uv": [25, 58], "uv_size": [5, 6]},
|
|
||||||
"south": {"uv": [19, 58], "uv_size": [5, 6]},
|
|
||||||
"west": {"uv": [12, 59], "uv_size": [5, 5]},
|
|
||||||
"up": {"uv": [5, 59], "uv_size": [6, 5]},
|
|
||||||
"down": {"uv": [0, 64], "uv_size": [5, -5]}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"origin": [-8, 1, -4],
|
|
||||||
"size": [1, 2, 2],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [42, 57], "uv_size": [4, 6]},
|
|
||||||
"east": {"uv": [24, 57], "uv_size": [5, 7]},
|
|
||||||
"south": {"uv": [17, 57], "uv_size": [5, 7]},
|
|
||||||
"west": {"uv": [11, 59], "uv_size": [5, 5]},
|
|
||||||
"up": {"uv": [5, 59], "uv_size": [6, 5]},
|
|
||||||
"down": {"uv": [0, 64], "uv_size": [5, -5]}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"origin": [-8, -2, -8],
|
|
||||||
"size": [1, 1, 2],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [48, 57], "uv_size": [4, 5]},
|
|
||||||
"east": {"uv": [24, 58], "uv_size": [5, 6]},
|
|
||||||
"south": {"uv": [16, 58], "uv_size": [5, 6]},
|
|
||||||
"west": {"uv": [10, 60], "uv_size": [5, 4]},
|
|
||||||
"up": {"uv": [5, 59], "uv_size": [6, 5]},
|
|
||||||
"down": {"uv": [0, 64], "uv_size": [5, -5]}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"origin": [-7, 0, -5],
|
|
||||||
"size": [2, 2, 2],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [46, 58], "uv_size": [5, 4]},
|
|
||||||
"east": {"uv": [30, 61], "uv_size": [5, 3]},
|
|
||||||
"south": {"uv": [23, 58], "uv_size": [6, 6]},
|
|
||||||
"west": {"uv": [15, 60], "uv_size": [5, 4]},
|
|
||||||
"up": {"uv": [6, 58], "uv_size": [7, 6]},
|
|
||||||
"down": {"uv": [0, 64], "uv_size": [6, -6]}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"origin": [-8, 0, -7],
|
|
||||||
"size": [2, 1, 2],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [42, 56], "uv_size": [5, 5]},
|
|
||||||
"east": {"uv": [26, 58], "uv_size": [5, 6]},
|
|
||||||
"south": {"uv": [19, 58], "uv_size": [6, 6]},
|
|
||||||
"west": {"uv": [13, 60], "uv_size": [5, 4]},
|
|
||||||
"up": {"uv": [6, 59], "uv_size": [7, 5]},
|
|
||||||
"down": {"uv": [0, 64], "uv_size": [6, -5]}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"origin": [-7, -1, -7],
|
|
||||||
"size": [1, 1, 2],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [54, 59], "uv_size": [4, 5]},
|
|
||||||
"east": {"uv": [23, 58], "uv_size": [5, 6]},
|
|
||||||
"south": {"uv": [17, 58], "uv_size": [5, 6]},
|
|
||||||
"west": {"uv": [10, 60], "uv_size": [5, 4]},
|
|
||||||
"up": {"uv": [5, 59], "uv_size": [6, 5]},
|
|
||||||
"down": {"uv": [0, 64], "uv_size": [5, -5]}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"origin": [-8, -1, -8],
|
|
||||||
"size": [1, 1, 2],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [54, 58], "uv_size": [4, 5]},
|
|
||||||
"east": {"uv": [21, 58], "uv_size": [5, 6]},
|
|
||||||
"south": {"uv": [15, 58], "uv_size": [5, 6]},
|
|
||||||
"west": {"uv": [9, 60], "uv_size": [5, 4]},
|
|
||||||
"up": {"uv": [5, 59], "uv_size": [6, 5]},
|
|
||||||
"down": {"uv": [0, 64], "uv_size": [5, -5]}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"origin": [-9, -2, -8],
|
|
||||||
"size": [1, 2, 2],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [26, 58], "uv_size": [4, 6]},
|
|
||||||
"east": {"uv": [31, 57], "uv_size": [5, 7]},
|
|
||||||
"south": {"uv": [17, 57], "uv_size": [5, 7]},
|
|
||||||
"west": {"uv": [12, 59], "uv_size": [5, 5]},
|
|
||||||
"up": {"uv": [5, 59], "uv_size": [6, 5]},
|
|
||||||
"down": {"uv": [0, 64], "uv_size": [5, -5]}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "body",
|
|
||||||
"pivot": [0, 0, 0],
|
|
||||||
"cubes": [
|
|
||||||
{
|
|
||||||
"origin": [-4, 3, 6],
|
|
||||||
"size": [7, 4, 1],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [3, 6], "uv_size": [7, 4]},
|
|
||||||
"east": {"uv": [7, 0], "uv_size": [3, 7]},
|
|
||||||
"south": {"uv": [14, 0], "uv_size": [7, 4]},
|
|
||||||
"west": {"uv": [24, 0], "uv_size": [3, 10]},
|
|
||||||
"up": {"uv": [11, 6], "uv_size": [12, 4]},
|
|
||||||
"down": {"uv": [41, 4], "uv_size": [7, -4]}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"origin": [-5, 1.75, -2],
|
|
||||||
"size": [9, 6, 8],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [8, 8], "uv_size": [9, 6]},
|
|
||||||
"east": {"uv": [0, 8], "uv_size": [8, 6]},
|
|
||||||
"south": {"uv": [25, 8], "uv_size": [9, 6]},
|
|
||||||
"west": {"uv": [17, 8], "uv_size": [8, 6]},
|
|
||||||
"up": {"uv": [8, 0], "uv_size": [9, 8]},
|
|
||||||
"down": {"uv": [17, 8], "uv_size": [9, -8]}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"origin": [-4, 2, -3],
|
|
||||||
"size": [7, 4, 1],
|
|
||||||
"uv": {
|
|
||||||
"north": {"uv": [10, 0], "uv_size": [10, 8]},
|
|
||||||
"east": {"uv": [27, 4], "uv_size": [2, 11]},
|
|
||||||
"south": {"uv": [0, 0], "uv_size": [11, 3]},
|
|
||||||
"west": {"uv": [22, 2], "uv_size": [3, 8]},
|
|
||||||
"up": {"uv": [18, 0], "uv_size": [7, 2]},
|
|
||||||
"down": {"uv": [29, 2], "uv_size": [7, -2]}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "feet",
|
|
||||||
"pivot": [0, 0, 0],
|
|
||||||
"cubes": [
|
|
||||||
{"origin": [-5, 1, -1.9], "size": [3, 1, 3], "uv": [0, 16]},
|
|
||||||
{"origin": [-5, 1, 3], "size": [3, 1, 3], "uv": [0, 16]},
|
|
||||||
{"origin": [1, 1, -1.9], "size": [3, 1, 3], "uv": [0, 16]},
|
|
||||||
{"origin": [1, 1, 3.1], "size": [3, 1, 3], "uv": [0, 16]}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "head",
|
|
||||||
"pivot": [0, 0, 0],
|
|
||||||
"cubes": [
|
|
||||||
{"origin": [2, 7, -1], "size": [4, 5, 6], "uv": [44, 5]},
|
|
||||||
{"origin": [6, 7, 0], "size": [1, 3, 4], "uv": [54, 0]},
|
|
||||||
{"origin": [7, 8, 1], "size": [1, 1, 2], "uv": [42, 5]},
|
|
||||||
{"origin": [1, 8, 0], "size": [1, 3, 4], "uv": [33, 0]}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ears",
|
|
||||||
"pivot": [0, 0, 0],
|
|
||||||
"cubes": [
|
|
||||||
{"origin": [3, 11, -2], "size": [1, 2, 2], "uv": [13, 16]},
|
|
||||||
{"origin": [3, 11, 4], "size": [1, 2, 2], "uv": [12, 16]}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,8 +1,8 @@
|
||||||
{
|
{
|
||||||
"key.otemod.open_vault": "Opens Vault 0",
|
"key.otemod.open_vault": "Opens Vault 0",
|
||||||
"key.category.otemod": "Only The Essentials",
|
"key.category.otemod": "Thresholds",
|
||||||
|
|
||||||
"itemGroup.tabs.otemod": "OTEMod",
|
"itemGroup.tabs.otemod": "Thresholds",
|
||||||
|
|
||||||
"item.minecraft.splash_potion.effect.flight": "Splash Potion of Flight",
|
"item.minecraft.splash_potion.effect.flight": "Splash Potion of Flight",
|
||||||
"item.minecraft.lingering_potion.effect.flight": "Lingering Potion of Flight",
|
"item.minecraft.lingering_potion.effect.flight": "Lingering Potion of Flight",
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 4.3 KiB |
Reference in a new issue