Create 1.20.1

This commit is contained in:
Chillcog committed 2026-07-03 20:18:03 -07:00
1 parent d7c2e58219
commit 0d71122fee
15 files changed
+165 -194

No files matched your search

+25 -4
View File
@@ -1,15 +1,15 @@
plugins {
id 'eclipse'
id 'net.neoforged.moddev' version '2.0.141'
id 'net.neoforged.moddev.legacyforge' version '2.0.141'
}
version = '1.0'
base.archivesName = "modid"
java.toolchain.languageVersion = JavaLanguageVersion.of(21)
java.toolchain.languageVersion = JavaLanguageVersion.of(17)
neoForge {
version = "21.1.190"
legacyForge {
version = "1.20.1-47.4.20"
runs {
client {
@@ -43,4 +43,25 @@ tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
}
mixin {
if (file("src/main/resources/sharky_lib.mixins.json").exists()) {
add sourceSets.main, "sharky_lib.refmap.json"
config "sharky_lib.mixins.json"
}
}
dependencies {
compileOnly(annotationProcessor("io.github.llamalad7:mixinextras-common:0.5.0"))
implementation(jarJar("io.github.llamalad7:mixinextras-forge:0.5.0"))
annotationProcessor 'org.spongepowered:mixin:0.8.5:processor'
}
jar {
if (file("src/main/resources/sharky_lib.mixins.json").exists()) {
manifest.attributes([
"MixinConfigs": "sharky_lib.mixins.json"
])
}
}
apply from: 'mcreator.gradle'
+5 -3
View File
@@ -1,11 +1,13 @@
pluginManagement {
repositories {
mavenLocal()
gradlePluginPortal()
maven { url = 'https://maven.neoforged.net/releases' }
maven {
name = 'MinecraftForge'
url = 'https://maven.minecraftforge.net/'
}
}
}
plugins {
id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0'
}
}
@@ -3,26 +3,27 @@ package com.chillcog.sharkylib;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import net.neoforged.neoforge.network.registration.PayloadRegistrar;
import net.neoforged.neoforge.network.handling.IPayloadHandler;
import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent;
import net.neoforged.neoforge.event.tick.ServerTickEvent;
import net.neoforged.neoforge.common.NeoForge;
import net.neoforged.fml.util.thread.SidedThreadGroups;
import net.neoforged.fml.common.Mod;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.bus.api.IEventBus;
import net.minecraftforge.network.simple.SimpleChannel;
import net.minecraftforge.network.NetworkRegistry;
import net.minecraftforge.network.NetworkEvent;
import net.minecraftforge.fml.util.thread.SidedThreadGroups;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraft.server.TickTask;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.network.FriendlyByteBuf;
import java.util.function.Supplier;
import java.util.function.Function;
import java.util.function.BiConsumer;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.Queue;
import java.util.PriorityQueue;
import java.util.Map;
import java.util.HashMap;
import java.util.Comparator;
import it.unimi.dsi.fastutil.ints.IntObjectPair;
@@ -39,39 +40,29 @@ public class SharkyLibMod {
public static final Logger LOGGER = LogManager.getLogger(SharkyLibMod.class);
public static final String MODID = "sharky_lib";
public SharkyLibMod(IEventBus modEventBus) {
public SharkyLibMod(FMLJavaModLoadingContext context) {
// Start of user code block mod constructor
// End of user code block mod constructor
NeoForge.EVENT_BUS.register(this);
modEventBus.addListener(this::registerNetworking);
SharkyLibModSounds.REGISTRY.register(modEventBus);
SharkyLibModBlocks.REGISTRY.register(modEventBus);
SharkyLibModBlockEntities.REGISTRY.register(modEventBus);
SharkyLibModItems.REGISTRY.register(modEventBus);
SharkyLibModTabs.REGISTRY.register(modEventBus);
MinecraftForge.EVENT_BUS.register(this);
IEventBus bus = context.getModEventBus();
SharkyLibModSounds.REGISTRY.register(bus);
SharkyLibModBlocks.REGISTRY.register(bus);
SharkyLibModBlockEntities.REGISTRY.register(bus);
SharkyLibModItems.REGISTRY.register(bus);
SharkyLibModTabs.REGISTRY.register(bus);
// Start of user code block mod init
// End of user code block mod init
}
// Start of user code block mod methods
// End of user code block mod methods
private static boolean networkingRegistered = false;
private static final Map<CustomPacketPayload.Type<?>, NetworkMessage<?>> MESSAGES = new HashMap<>();
private static final String PROTOCOL_VERSION = "1";
public static final SimpleChannel PACKET_HANDLER = NetworkRegistry.newSimpleChannel(new ResourceLocation(MODID, MODID), () -> PROTOCOL_VERSION, PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals);
private static int messageID = 0;
private record NetworkMessage<T extends CustomPacketPayload>(StreamCodec<? extends FriendlyByteBuf, T> reader, IPayloadHandler<T> handler) {
}
public static <T extends CustomPacketPayload> void addNetworkMessage(CustomPacketPayload.Type<T> id, StreamCodec<? extends FriendlyByteBuf, T> reader, IPayloadHandler<T> handler) {
if (networkingRegistered)
throw new IllegalStateException("Cannot register new network messages after networking has been registered");
MESSAGES.put(id, new NetworkMessage<>(reader, handler));
}
@SuppressWarnings({"rawtypes", "unchecked"})
private void registerNetworking(final RegisterPayloadHandlersEvent event) {
final PayloadRegistrar registrar = event.registrar(MODID);
MESSAGES.forEach((id, networkMessage) -> registrar.playBidirectional(id, ((NetworkMessage) networkMessage).reader(), ((NetworkMessage) networkMessage).handler()));
networkingRegistered = true;
public static <T> void addNetworkMessage(Class<T> messageType, BiConsumer<T, FriendlyByteBuf> encoder, Function<FriendlyByteBuf, T> decoder, BiConsumer<T, Supplier<NetworkEvent.Context>> messageConsumer) {
PACKET_HANDLER.registerMessage(messageID, messageType, encoder, decoder, messageConsumer);
messageID++;
}
private static final Queue<IntObjectPair<Runnable>> workToBeScheduled = new ConcurrentLinkedQueue<>();
@@ -83,14 +74,16 @@ public class SharkyLibMod {
}
@SubscribeEvent
public void tick(ServerTickEvent.Post event) {
int currentTick = event.getServer().getTickCount();
IntObjectPair<Runnable> work;
while ((work = workToBeScheduled.poll()) != null) {
workQueue.add(new TickTask(currentTick + work.leftInt(), work.right()));
}
while (!workQueue.isEmpty() && currentTick >= workQueue.peek().getTick()) {
workQueue.poll().run();
public void tick(TickEvent.ServerTickEvent event) {
if (event.phase == TickEvent.Phase.END) {
int currentTick = event.getServer().getTickCount();
IntObjectPair<Runnable> work;
while ((work = workToBeScheduled.poll()) != null) {
workQueue.add(new TickTask(currentTick + work.leftInt(), work.right()));
}
while (!workQueue.isEmpty() && currentTick >= workQueue.peek().getTick()) {
workQueue.poll().run();
}
}
}
}
@@ -1,22 +1,24 @@
package com.chillcog.sharkylib.block.entity;
import net.neoforged.neoforge.fluids.capability.templates.FluidTank;
import net.minecraftforge.items.wrapper.SidedInvWrapper;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.fluids.capability.templates.FluidTank;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.inventory.ChestMenu;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.WorldlyContainer;
import net.minecraft.world.ContainerHelper;
import net.minecraft.world.Container;
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
import net.minecraft.network.chat.Component;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.core.NonNullList;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.Direction;
import net.minecraft.core.BlockPos;
@@ -28,27 +30,52 @@ import com.chillcog.sharkylib.init.SharkyLibModBlockEntities;
public class SharkBlockEntity extends RandomizableContainerBlockEntity implements WorldlyContainer {
private NonNullList<ItemStack> stacks = NonNullList.withSize(0, ItemStack.EMPTY);
private final LazyOptional<? extends IItemHandler>[] handlers = SidedInvWrapper.create(this, Direction.values());
public SharkBlockEntity(BlockPos position, BlockState state) {
super(SharkyLibModBlockEntities.BLAHAJ.get(), position, state);
}
@Override
public void loadAdditional(CompoundTag compound, HolderLookup.Provider lookupProvider) {
super.loadAdditional(compound, lookupProvider);
public void load(CompoundTag compound) {
super.load(compound);
if (!this.tryLoadLootTable(compound))
this.stacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY);
ContainerHelper.loadAllItems(compound, this.stacks, lookupProvider);
ContainerHelper.loadAllItems(compound, this.stacks);
if (compound.get("fluidTank") instanceof CompoundTag compoundTag)
fluidTank.readFromNBT(lookupProvider, compoundTag);
fluidTank.readFromNBT(compoundTag);
}
@Override
public void saveAdditional(CompoundTag compound, HolderLookup.Provider lookupProvider) {
super.saveAdditional(compound, lookupProvider);
if (!this.trySaveLootTable(compound))
ContainerHelper.saveAllItems(compound, this.stacks, lookupProvider);
compound.put("fluidTank", fluidTank.writeToNBT(lookupProvider, new CompoundTag()));
public void saveAdditional(CompoundTag compound) {
super.saveAdditional(compound);
if (!this.trySaveLootTable(compound)) {
ContainerHelper.saveAllItems(compound, this.stacks);
}
compound.put("fluidTank", fluidTank.writeToNBT(new CompoundTag()));
}
@Override
public ClientboundBlockEntityDataPacket getUpdatePacket() {
return ClientboundBlockEntityDataPacket.create(this);
}
@Override
public CompoundTag getUpdateTag() {
return this.saveWithFullMetadata();
}
@Override
public int getContainerSize() {
return stacks.size();
}
@Override
public boolean isEmpty() {
for (ItemStack itemstack : this.stacks)
if (!itemstack.isEmpty())
return false;
return true;
}
@Override
@@ -76,65 +103,6 @@ public class SharkBlockEntity extends RandomizableContainerBlockEntity implement
this.stacks = stacks;
}
@Override
public ClientboundBlockEntityDataPacket getUpdatePacket() {
return ClientboundBlockEntityDataPacket.create(this);
}
@Override
public CompoundTag getUpdateTag(HolderLookup.Provider lookupProvider) {
return this.saveWithFullMetadata(lookupProvider);
}
@Override
public int getContainerSize() {
return stacks.size();
}
@Override
public boolean isEmpty() {
for (ItemStack stack : this.stacks)
if (!stack.isEmpty())
return false;
return true;
}
@Override
public ItemStack getItem(int slot) {
return this.stacks.get(slot);
}
@Override
public ItemStack removeItem(int slot, int amount) {
ItemStack result = ContainerHelper.removeItem(this.stacks, slot, amount);
if (!result.isEmpty())
this.setChanged();
return result;
}
@Override
public ItemStack removeItemNoUpdate(int slot) {
return ContainerHelper.takeItem(this.stacks, slot);
}
@Override
public void setItem(int slot, ItemStack stack) {
this.stacks.set(slot, stack);
if (stack.getCount() > this.getMaxStackSize())
stack.setCount(this.getMaxStackSize());
this.setChanged();
}
@Override
public boolean stillValid(Player player) {
return Container.stillValidBlockEntity(this, player);
}
@Override
public void clearContent() {
this.stacks.clear();
}
@Override
public boolean canPlaceItem(int index, ItemStack stack) {
return true;
@@ -164,7 +132,19 @@ public class SharkBlockEntity extends RandomizableContainerBlockEntity implement
}
};
public FluidTank getFluidTank() {
return fluidTank;
@Override
public <T> LazyOptional<T> getCapability(Capability<T> capability, @Nullable Direction facing) {
if (!this.remove && facing != null && capability == ForgeCapabilities.ITEM_HANDLER)
return handlers[facing.ordinal()].cast();
if (!this.remove && capability == ForgeCapabilities.FLUID_HANDLER)
return LazyOptional.of(() -> fluidTank).cast();
return super.getCapability(capability, facing);
}
@Override
public void setRemoved() {
super.setRemoved();
for (LazyOptional<? extends IItemHandler> handler : handlers)
handler.invalidate();
}
}
@@ -3,36 +3,24 @@
*/
package com.chillcog.sharkylib.init;
import net.neoforged.neoforge.registries.DeferredRegister;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.items.wrapper.SidedInvWrapper;
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
import net.neoforged.neoforge.capabilities.Capabilities;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.bus.api.SubscribeEvent;
import net.minecraftforge.registries.RegistryObject;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.Block;
import net.minecraft.core.registries.BuiltInRegistries;
import com.chillcog.sharkylib.block.entity.SharkBlockEntity;
import com.chillcog.sharkylib.SharkyLibMod;
@EventBusSubscriber
public class SharkyLibModBlockEntities {
public static final DeferredRegister<BlockEntityType<?>> REGISTRY = DeferredRegister.create(BuiltInRegistries.BLOCK_ENTITY_TYPE, SharkyLibMod.MODID);
public static final DeferredHolder<BlockEntityType<?>, BlockEntityType<SharkBlockEntity>> BLAHAJ = register("blahaj", SharkyLibModBlocks.BLAHAJ, SharkBlockEntity::new);
public static final DeferredRegister<BlockEntityType<?>> REGISTRY = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, SharkyLibMod.MODID);
public static final RegistryObject<BlockEntityType<SharkBlockEntity>> BLAHAJ = register("blahaj", SharkyLibModBlocks.BLAHAJ, SharkBlockEntity::new);
// Start of user code block custom block entities
// End of user code block custom block entities
private static <T extends BlockEntity> DeferredHolder<BlockEntityType<?>, BlockEntityType<T>> register(String registryname, DeferredHolder<Block, Block> block, BlockEntityType.BlockEntitySupplier<T> supplier) {
private static <T extends BlockEntity> RegistryObject<BlockEntityType<T>> register(String registryname, RegistryObject<Block> block, BlockEntityType.BlockEntitySupplier<T> supplier) {
return REGISTRY.register(registryname, () -> BlockEntityType.Builder.of(supplier, block.get()).build(null));
}
@SubscribeEvent
public static void registerCapabilities(RegisterCapabilitiesEvent event) {
event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, BLAHAJ.get(), SidedInvWrapper::new);
event.registerBlockEntity(Capabilities.FluidHandler.BLOCK, BLAHAJ.get(), (blockEntity, side) -> blockEntity.getFluidTank());
}
}
@@ -3,8 +3,9 @@
*/
package com.chillcog.sharkylib.init;
import net.neoforged.neoforge.registries.DeferredRegister;
import net.neoforged.neoforge.registries.DeferredBlock;
import net.minecraftforge.registries.RegistryObject;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraft.world.level.block.Block;
@@ -12,8 +13,8 @@ import com.chillcog.sharkylib.block.SharkBlock;
import com.chillcog.sharkylib.SharkyLibMod;
public class SharkyLibModBlocks {
public static final DeferredRegister.Blocks REGISTRY = DeferredRegister.createBlocks(SharkyLibMod.MODID);
public static final DeferredBlock<Block> BLAHAJ;
public static final DeferredRegister<Block> REGISTRY = DeferredRegister.create(ForgeRegistries.BLOCKS, SharkyLibMod.MODID);
public static final RegistryObject<Block> BLAHAJ;
static {
BLAHAJ = REGISTRY.register("blahaj", SharkBlock::new);
}
@@ -3,9 +3,9 @@
*/
package com.chillcog.sharkylib.init;
import net.neoforged.neoforge.registries.DeferredRegister;
import net.neoforged.neoforge.registries.DeferredItem;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.minecraftforge.registries.RegistryObject;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.item.Rarity;
@@ -16,9 +16,9 @@ import com.chillcog.sharkylib.item.CaveKeysItem;
import com.chillcog.sharkylib.SharkyLibMod;
public class SharkyLibModItems {
public static final DeferredRegister.Items REGISTRY = DeferredRegister.createItems(SharkyLibMod.MODID);
public static final DeferredItem<Item> BLAHAJ;
public static final DeferredItem<Item> CAVE_KEYS;
public static final DeferredRegister<Item> REGISTRY = DeferredRegister.create(ForgeRegistries.ITEMS, SharkyLibMod.MODID);
public static final RegistryObject<Item> BLAHAJ;
public static final RegistryObject<Item> CAVE_KEYS;
static {
BLAHAJ = block(SharkyLibModBlocks.BLAHAJ, new Item.Properties().rarity(Rarity.EPIC));
CAVE_KEYS = REGISTRY.register("cave_keys", CaveKeysItem::new);
@@ -26,11 +26,11 @@ public class SharkyLibModItems {
// Start of user code block custom items
// End of user code block custom items
private static DeferredItem<Item> block(DeferredHolder<Block, Block> block) {
private static RegistryObject<Item> block(RegistryObject<Block> block) {
return block(block, new Item.Properties());
}
private static DeferredItem<Item> block(DeferredHolder<Block, Block> block, Item.Properties properties) {
private static RegistryObject<Item> block(RegistryObject<Block> block, Item.Properties properties) {
return REGISTRY.register(block.getId().getPath(), () -> new BlockItem(block.get(), properties));
}
}
@@ -3,17 +3,17 @@
*/
package com.chillcog.sharkylib.init;
import net.neoforged.neoforge.registries.DeferredRegister;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.minecraftforge.registries.RegistryObject;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.core.registries.Registries;
import com.chillcog.sharkylib.SharkyLibMod;
public class SharkyLibModSounds {
public static final DeferredRegister<SoundEvent> REGISTRY = DeferredRegister.create(Registries.SOUND_EVENT, SharkyLibMod.MODID);
public static final DeferredHolder<SoundEvent, SoundEvent> CAVE_KEYS = REGISTRY.register("cave_keys", () -> SoundEvent.createVariableRangeEvent(ResourceLocation.fromNamespaceAndPath("sharky_lib", "cave_keys")));
public static final DeferredHolder<SoundEvent, SoundEvent> BLOCKY_DAWN = REGISTRY.register("blocky_dawn", () -> SoundEvent.createVariableRangeEvent(ResourceLocation.fromNamespaceAndPath("sharky_lib", "blocky_dawn")));
public static final DeferredRegister<SoundEvent> REGISTRY = DeferredRegister.create(ForgeRegistries.SOUND_EVENTS, SharkyLibMod.MODID);
public static final RegistryObject<SoundEvent> CAVE_KEYS = REGISTRY.register("cave_keys", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("sharky_lib", "cave_keys")));
public static final RegistryObject<SoundEvent> BLOCKY_DAWN = REGISTRY.register("blocky_dawn", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("sharky_lib", "blocky_dawn")));
}
@@ -3,8 +3,8 @@
*/
package com.chillcog.sharkylib.init;
import net.neoforged.neoforge.registries.DeferredRegister;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.minecraftforge.registries.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.CreativeModeTab;
@@ -15,7 +15,7 @@ import com.chillcog.sharkylib.SharkyLibMod;
public class SharkyLibModTabs {
public static final DeferredRegister<CreativeModeTab> REGISTRY = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, SharkyLibMod.MODID);
public static final DeferredHolder<CreativeModeTab, CreativeModeTab> SHARKY_LIB = REGISTRY.register("sharky_lib",
public static final RegistryObject<CreativeModeTab> SHARKY_LIB = REGISTRY.register("sharky_lib",
() -> CreativeModeTab.builder().title(Component.translatable("item_group.sharky_lib.sharky_lib")).icon(() -> new ItemStack(SharkyLibModBlocks.BLAHAJ.get())).displayItems((parameters, tabData) -> {
tabData.accept(SharkyLibModBlocks.BLAHAJ.get().asItem());
tabData.accept(SharkyLibModItems.CAVE_KEYS.get());
@@ -1,15 +1,14 @@
package com.chillcog.sharkylib.item;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraft.world.item.RecordItem;
import net.minecraft.world.item.Rarity;
import net.minecraft.world.item.Item;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.resources.ResourceKey;
import net.minecraft.core.registries.Registries;
import com.chillcog.sharkylib.SharkyLibMod;
public class CaveKeysItem extends Item {
public class CaveKeysItem extends RecordItem {
public CaveKeysItem() {
super(new Item.Properties().stacksTo(1).rarity(Rarity.UNCOMMON).jukeboxPlayable(ResourceKey.create(Registries.JUKEBOX_SONG, ResourceLocation.fromNamespaceAndPath(SharkyLibMod.MODID, "cave_keys"))));
super(14, () -> ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("sharky_lib:cave_keys")), new Item.Properties().stacksTo(1).rarity(Rarity.UNCOMMON), 3680);
}
}
@@ -1,5 +1,5 @@
modLoader="javafml"
loaderVersion="[4,)"
loaderVersion="[47,)"
license="All Rights Reserved"
[[mods]]
@@ -13,21 +13,10 @@ authors="Kyle Speight"
# Start of user code block mod configuration
# End of user code block mod configuration
# Start of user code block custom mixins
# End of user code block custom mixins
[[dependencies.sharky_lib]]
modId="neoforge"
type="required"
versionRange="[21.1.190,)"
ordering="AFTER"
side="BOTH"
[[dependencies.sharky_lib]]
modId="minecraft"
type="required"
versionRange="[1.21.1]"
mandatory=true
versionRange="[1.20.1]"
ordering="AFTER"
side="BOTH"
@@ -0,0 +1,6 @@
{
"replace": false,
"values": [
"sharky_lib:cave_keys"
]
}
@@ -1,8 +0,0 @@
{
"comparator_output": 14,
"description": {
"translate": "item.sharky_lib.cave_keys.desc"
},
"length_in_seconds": 184,
"sound_event": "sharky_lib:cave_keys"
}
+1 -1
View File
@@ -1,6 +1,6 @@
{
"pack": {
"pack_format": 48,
"pack_format": 15,
"description": ""
}
}