diff --git a/gradle.properties b/gradle.properties index 7ded52c..555cca6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false -libzontreck=1.9.122023.1612 +libzontreck=1.10.010224.1940 ## Environment Properties diff --git a/src/main/java/dev/zontreck/otemod/OTEMod.java b/src/main/java/dev/zontreck/otemod/OTEMod.java index aeda38b..2608d4f 100644 --- a/src/main/java/dev/zontreck/otemod/OTEMod.java +++ b/src/main/java/dev/zontreck/otemod/OTEMod.java @@ -20,8 +20,10 @@ import dev.zontreck.otemod.implementation.CreativeModeTabs; import dev.zontreck.otemod.implementation.InventoryBackup; import dev.zontreck.otemod.implementation.Messages; import dev.zontreck.otemod.implementation.PlayerFirstJoinTag; +import dev.zontreck.otemod.implementation.compressor.CompressionChamberScreen; import dev.zontreck.otemod.implementation.vault.*; import dev.zontreck.otemod.integrations.KeyBindings; +import dev.zontreck.otemod.recipe.ModRecipes; import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.client.renderer.entity.EntityRenderers; import net.minecraft.network.chat.Component; @@ -130,6 +132,7 @@ public class OTEMod ModEntities.register(bus); ModEnchantments.register(bus); ModEntityTypes.register(bus); + ModRecipes.register(bus); //MenuInitializer.register(bus); @@ -312,6 +315,7 @@ public class OTEMod MenuScreens.register(ModMenuTypes.VAULT.get(), VaultScreen::new); MenuScreens.register(ModMenuTypes.SCRUBBER.get(), ItemScrubberScreen::new); MenuScreens.register(ModMenuTypes.MAGIC_SCRUBBER.get(), MagicalScrubberScreen::new); + MenuScreens.register(ModMenuTypes.COMPRESSION_CHAMBER.get(), CompressionChamberScreen::new); //ItemBlockRenderTypes.setRenderLayer(ModBlocks.AURORA_DOOR.get(), RenderType.translucent()); diff --git a/src/main/java/dev/zontreck/otemod/blocks/CompressionChamberBlock.java b/src/main/java/dev/zontreck/otemod/blocks/CompressionChamberBlock.java new file mode 100644 index 0000000..c3c79e3 --- /dev/null +++ b/src/main/java/dev/zontreck/otemod/blocks/CompressionChamberBlock.java @@ -0,0 +1,83 @@ +package dev.zontreck.otemod.blocks; + +import dev.zontreck.otemod.blocks.entity.CompressionChamberBlockEntity; +import dev.zontreck.otemod.blocks.entity.ModEntities; +import dev.zontreck.otemod.networking.ModMessages; +import dev.zontreck.otemod.networking.packets.EnergySyncS2CPacket; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraftforge.network.NetworkHooks; +import org.jetbrains.annotations.Nullable; + +public class CompressionChamberBlock extends BaseEntityBlock +{ + + public CompressionChamberBlock(Properties pProperties) { + super(pProperties); + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + return new CompressionChamberBlockEntity(blockPos, blockState); + } + + @Override + public RenderShape getRenderShape(BlockState pState) { + return RenderShape.MODEL; + } + + @Override + public InteractionResult use(BlockState state, Level lvl, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) + { + if(!lvl.isClientSide()) + { + BlockEntity be = lvl.getBlockEntity(pos); + if(be instanceof CompressionChamberBlockEntity) + { + CompressionChamberBlockEntity entity = (CompressionChamberBlockEntity) be; + NetworkHooks.openScreen(((ServerPlayer)player), entity, pos); + + ModMessages.sendToPlayer(new EnergySyncS2CPacket(entity.getEnergyStorage().getEnergyStored(), entity.getBlockPos()), (ServerPlayer)player); + + }else{ + throw new IllegalStateException("Our container is missing!"); + } + } + + return InteractionResult.sidedSuccess(lvl.isClientSide); + } + + @Override + public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState pNewState, boolean pMovedByPiston) { + if(pState.getBlock() != pNewState.getBlock()) + { + BlockEntity be = pLevel.getBlockEntity(pPos); + if(be instanceof CompressionChamberBlockEntity) + { + ((CompressionChamberBlockEntity)be).doDrop(); + } + } + + super.onRemove(pState, pLevel, pPos, pNewState, pMovedByPiston); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level pLevel, BlockState pState, BlockEntityType pBlockEntityType) { + + return createTickerHelper(pBlockEntityType, ModEntities.COMPRESSION_CHAMBER.get(), CompressionChamberBlockEntity::tick); + } +} diff --git a/src/main/java/dev/zontreck/otemod/blocks/ModBlocks.java b/src/main/java/dev/zontreck/otemod/blocks/ModBlocks.java index 7a4fc9d..25356c2 100644 --- a/src/main/java/dev/zontreck/otemod/blocks/ModBlocks.java +++ b/src/main/java/dev/zontreck/otemod/blocks/ModBlocks.java @@ -90,6 +90,18 @@ public class ModBlocks { public static final RegistryObject ILUSIUM_BLOCK_I = CreativeModeTabs.addToOTEModTab(ITEMS.register("ilusium_block", () -> new BlockItem(ILUSIUM_BLOCK.get(), new Item.Properties()))); + public static final RegistryObject COMPRESSION_CHAMBER_BLOCK = BLOCKS.register("compression_chamber", ()->new CompressionChamberBlock(BlockBehaviour.Properties.copy(ModBlocks.ILUSIUM_BLOCK.get()).noOcclusion().isViewBlocking(ModBlocks::never))); + + public static final RegistryObject COMPRESSION_CHAMBER_BLOCK_I = CreativeModeTabs.addToOTEModTab(ITEMS.register("compression_chamber", ()->new BlockItem(COMPRESSION_CHAMBER_BLOCK.get(), new Item.Properties()))); + + + public static final RegistryObject COMPRESSED_OBSIDIAN_BLOCK = BLOCKS.register("compressed_obsidian_block", ()->new Block(BlockBehaviour.Properties.copy(Blocks.OBSIDIAN))); + + public static final RegistryObject COMPRESSED_OBSIDIAN_BLOCK_I = CreativeModeTabs.addToOTEModTab(ITEMS.register("compressed_obsidian_block", ()->new BlockItem(COMPRESSED_OBSIDIAN_BLOCK.get(), new Item.Properties()))); + public static final RegistryObject LAYERED_COMPRESSED_OBSIDIAN_BLOCK = BLOCKS.register("layered_compressed_obsidian_block", ()->new Block(BlockBehaviour.Properties.copy(Blocks.OBSIDIAN))); + + public static final RegistryObject LAYERED_COMPRESSED_OBSIDIAN_BLOCK_I = CreativeModeTabs.addToOTEModTab(ITEMS.register("layered_compressed_obsidian_block", ()->new BlockItem(LAYERED_COMPRESSED_OBSIDIAN_BLOCK.get(), new Item.Properties()))); + diff --git a/src/main/java/dev/zontreck/otemod/blocks/entity/CompressionChamberBlockEntity.java b/src/main/java/dev/zontreck/otemod/blocks/entity/CompressionChamberBlockEntity.java new file mode 100644 index 0000000..2754ebc --- /dev/null +++ b/src/main/java/dev/zontreck/otemod/blocks/entity/CompressionChamberBlockEntity.java @@ -0,0 +1,305 @@ +package dev.zontreck.otemod.blocks.entity; + +import dev.zontreck.otemod.implementation.OutputItemStackHandler; +import dev.zontreck.otemod.implementation.compressor.CompressionChamberMenu; +import dev.zontreck.otemod.implementation.energy.OTEEnergy; +import dev.zontreck.otemod.networking.ModMessages; +import dev.zontreck.otemod.networking.packets.EnergySyncS2CPacket; +import dev.zontreck.otemod.recipe.CompressionChamberRecipe; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.world.Containers; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ContainerData; +import net.minecraft.world.inventory.SimpleContainerData; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +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.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.energy.EnergyStorage; +import net.minecraftforge.energy.IEnergyStorage; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemStackHandler; + +import javax.annotation.Nullable; +import java.util.Optional; + +public class CompressionChamberBlockEntity extends BlockEntity implements MenuProvider +{ + + public CompressionChamberBlockEntity(BlockPos pPos, BlockState pBlockState) { + super(ModEntities.COMPRESSION_CHAMBER.get(), pPos, pBlockState); + + outputSlot = new OutputItemStackHandler(outputItems); + data = new ContainerData() { + @Override + public int get(int i) { + return switch (i){ + case 0 -> CompressionChamberBlockEntity.this.progress; + default -> 0; + }; + } + + @Override + public void set(int i, int i1) { + switch(i) + { + case 0->CompressionChamberBlockEntity.this.progress = i1; + } + } + + @Override + public int getCount() { + return 1; + } + }; + } + + protected final ContainerData data; + protected int progress=0; + + public static final int MAXIMUM_PROCESSING_TICKS = 750; + + protected final ItemStackHandler itemsHandler = new ItemStackHandler(1){ + @Override + protected void onContentsChanged(int slot) + { + setChanged(); + } + }; + protected final ItemStackHandler outputItems = new ItemStackHandler(1){ + @Override + protected void onContentsChanged(int slot) + { + setChanged(); + } + }; + private ItemStackHandler outputSlot; + + private final OTEEnergy ENERGY_STORAGE = new OTEEnergy(ENERGY_REQUIREMENT*3, ENERGY_REQUIREMENT*512) { + + @Override + public void onChanged() { + setChanged(); + + ModMessages.sendToAll(new EnergySyncS2CPacket(energy, getBlockPos())); + + } + }; + + + private static final int ENERGY_REQUIREMENT = 7500; + + private LazyOptional lazyEnergyHandler = LazyOptional.empty(); + + private LazyOptional lazyItemHandler = LazyOptional.empty(); + private LazyOptional lazyOutputItems = LazyOptional.empty(); + + + @Override + public Component getDisplayName() { + return Component.literal("Compression Chamber"); + } + + @Override + @Nullable + public AbstractContainerMenu createMenu(int id, Inventory inv, Player player) { + return new CompressionChamberMenu(id, inv, this, this.data); + } + + + @Override + public LazyOptional getCapability(Capability cap, Direction side) + { + if(cap == ForgeCapabilities.ENERGY) + { + return lazyEnergyHandler.cast(); + } + if(side == Direction.DOWN && cap == ForgeCapabilities.ITEM_HANDLER) + { + // Return the output slot only + return lazyOutputItems.cast(); + } + if(cap == ForgeCapabilities.ITEM_HANDLER) + { + return lazyItemHandler.cast(); + } + + return super.getCapability(cap,side); + } + + + @Override + public void onLoad() + { + super.onLoad(); + lazyItemHandler = LazyOptional.of(()->itemsHandler); + lazyOutputItems = LazyOptional.of(()->outputSlot); + lazyEnergyHandler = LazyOptional.of(()->ENERGY_STORAGE); + } + + + @Override + public void invalidateCaps() + { + super.invalidateCaps(); + lazyItemHandler.invalidate(); + lazyOutputItems.invalidate(); + lazyEnergyHandler.invalidate(); + } + + @Override + protected void saveAdditional(CompoundTag nbt) + { + nbt.put("inventory", itemsHandler.serializeNBT()); + nbt.put("output", outputItems.serializeNBT()); + nbt.putInt("prog", progress); + nbt.putInt("energy", ENERGY_STORAGE.getEnergyStored()); + + super.saveAdditional(nbt); + } + + @Override + public void load(CompoundTag nbt){ + super.load(nbt); + + itemsHandler.deserializeNBT(nbt.getCompound("inventory")); + outputItems.deserializeNBT(nbt.getCompound("output")); + progress = nbt.getInt("prog"); + ENERGY_STORAGE.setEnergy(nbt.getInt("energy")); + } + + public void doDrop() + { + SimpleContainer cont = new SimpleContainer(itemsHandler.getSlots()); + for (int i = 0; i < itemsHandler.getSlots(); i++) { + cont.setItem(i, itemsHandler.getStackInSlot(i)); + } + cont = new SimpleContainer(outputItems.getSlots()); + for (int i = 0; i < outputItems.getSlots(); i++) { + cont.setItem(i, outputItems.getStackInSlot(i)); + } + + Containers.dropContents(this.level, this.worldPosition, cont); + } + + + public static void tick(Level lvl, BlockPos pos, BlockState state, CompressionChamberBlockEntity entity) + { + if(lvl.isClientSide())return; + + + if(hasRecipe(entity)) + { + if(!hasEnergy(entity))return; // Halt until sufficient energy has been received + entity.progress++; + setChanged(lvl, pos, state); + drain(entity); + + if(entity.progress >= CompressionChamberBlockEntity.MAXIMUM_PROCESSING_TICKS) + { + craftItem(entity); + } + }else { + if(entity.progress>0){ + entity.resetProgress(); + setChanged(lvl, pos, state); + } + } + } + + + private static void drain(CompressionChamberBlockEntity entity) { + entity.ENERGY_STORAGE.extractEnergy(ENERGY_REQUIREMENT, false); + } + + private static boolean hasEnergy(CompressionChamberBlockEntity entity) { + return (entity.ENERGY_STORAGE.getEnergyStored() >= ENERGY_REQUIREMENT); + } + + + private static void craftItem(CompressionChamberBlockEntity entity) { + if(hasRecipe(entity)) + { + SimpleContainer inventory = new SimpleContainer(entity.itemsHandler.getSlots()); + for(int i=0;i recipe = entity.level.getRecipeManager().getRecipeFor(CompressionChamberRecipe.Type.INSTANCE, inventory, entity.level); + + ItemStack existing = entity.outputItems.getStackInSlot(0); + + if(existing.is(Items.AIR)) + { + existing = recipe.get().getResultItem(entity.level.registryAccess()); + }else + existing.setCount(recipe.get().getResultItem(entity.level.registryAccess()).getCount() + existing.getCount()); + + entity.outputItems.setStackInSlot(0, existing); + entity.itemsHandler.extractItem(0,1,false); + + + entity.resetProgress(); + } + } + + private static boolean hasRecipe(CompressionChamberBlockEntity entity) { + SimpleContainer inventory = new SimpleContainer(entity.itemsHandler.getSlots()); + for(int i=0;i recipe = entity.level.getRecipeManager().getRecipeFor(CompressionChamberRecipe.Type.INSTANCE, inventory, entity.level); + + return recipe.isPresent() && canInsertIntoOutput(output, recipe.get().getResultItem(entity.level.registryAccess())); + } + + private static boolean canInsertIntoOutput(SimpleContainer inventory, ItemStack result) { + ItemStack existing = inventory.getItem(0); + boolean stackCompat = (existing.getMaxStackSize() > existing.getCount()); + boolean sameType = (existing.getItem() == result.getItem()); + boolean outputEmpty = existing.isEmpty(); + + if(outputEmpty)return true; + return (stackCompat && sameType); + } + + private void resetProgress() { + progress=0; + + } + + public IEnergyStorage getEnergyStorage() { + return ENERGY_STORAGE; + } + + public void setEnergy(int energy) { + ENERGY_STORAGE.setEnergy(energy); + } + + +} diff --git a/src/main/java/dev/zontreck/otemod/blocks/entity/ModEntities.java b/src/main/java/dev/zontreck/otemod/blocks/entity/ModEntities.java index 813b289..56cb9ad 100644 --- a/src/main/java/dev/zontreck/otemod/blocks/entity/ModEntities.java +++ b/src/main/java/dev/zontreck/otemod/blocks/entity/ModEntities.java @@ -1,6 +1,7 @@ package dev.zontreck.otemod.blocks.entity; import dev.zontreck.otemod.OTEMod; +import dev.zontreck.otemod.blocks.CompressionChamberBlock; import dev.zontreck.otemod.blocks.ModBlocks; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -19,6 +20,8 @@ public class ModEntities { public static final ResourceLocation PARALLAX_BLOCK = new ResourceLocation(OTEMod.MOD_ID, "parallax_block"); + public static final RegistryObject> COMPRESSION_CHAMBER = ENTITIES.register("compression_chamber", ()->BlockEntityType.Builder.of(CompressionChamberBlockEntity::new, ModBlocks.COMPRESSION_CHAMBER_BLOCK.get()).build(null)); + public static final RegistryObject > PARALLAX_WINDOW_ENTITY = ENTITIES.register("parallax_window", ()->BlockEntityType.Builder.of(ParallaxWindowEntity::new, ModBlocks.LIMINAL_WINDOW.get()).build(null)); diff --git a/src/main/java/dev/zontreck/otemod/configs/OTEServerConfig.java b/src/main/java/dev/zontreck/otemod/configs/OTEServerConfig.java index 5e1251e..bd5f140 100644 --- a/src/main/java/dev/zontreck/otemod/configs/OTEServerConfig.java +++ b/src/main/java/dev/zontreck/otemod/configs/OTEServerConfig.java @@ -37,6 +37,7 @@ public class OTEServerConfig { public static final ForgeConfigSpec.ConfigValue GIVE_KIT_EVERY_CHANGE; + public static final ForgeConfigSpec.ConfigValue DEBUG; static { List defaultExcludeDimensions = new ArrayList(); @@ -44,6 +45,7 @@ public class OTEServerConfig { defaultExcludeDimensions.add("minecraft:the_end"); // Excluded due to End Crystals BUILDER.push("OTE"); + DEBUG = BUILDER.comment("Turn on debug messages in the console for all OTE functions? This could be spammy").define("debug_enabled", false); BUILDER.push("STARTERKIT"); GIVE_KIT_EVERY_CHANGE = BUILDER.comment("Enable this to give the starter kit every time it is changed, regardless of whether the player has already received that kit on their next join.").define("starter_kit_given_on_change", false); @@ -79,7 +81,6 @@ public class OTEServerConfig { defDims.add("minecraft:the_end"); defDims.add("minecraft:the_nether"); defDims.add("otemod:resource"); - defDims.add("otemod:resource_nether"); EXCLUDE_DIMS = BUILDER.comment("Dimension names (ex. minecraft:overworld) to exclude from the explosion healing events").define("exclude_dimensions", defDims); BUILDER.pop(); diff --git a/src/main/java/dev/zontreck/otemod/enchantments/FlightEnchantment.java b/src/main/java/dev/zontreck/otemod/enchantments/FlightEnchantment.java index 5be072a..cd016c3 100644 --- a/src/main/java/dev/zontreck/otemod/enchantments/FlightEnchantment.java +++ b/src/main/java/dev/zontreck/otemod/enchantments/FlightEnchantment.java @@ -72,6 +72,12 @@ public class FlightEnchantment extends Enchantment recheck((ServerPlayer)ev.getEntity()); } + + @SubscribeEvent + public static void onArmorBreak(LivingEquipmentChangeEvent ev) + { + + } } public FlightEnchantment(EquipmentSlot... slots) diff --git a/src/main/java/dev/zontreck/otemod/enchantments/MobEggEnchantment.java b/src/main/java/dev/zontreck/otemod/enchantments/MobEggEnchantment.java index acdf956..c5bad29 100644 --- a/src/main/java/dev/zontreck/otemod/enchantments/MobEggEnchantment.java +++ b/src/main/java/dev/zontreck/otemod/enchantments/MobEggEnchantment.java @@ -2,6 +2,7 @@ package dev.zontreck.otemod.enchantments; import java.util.Random; +import dev.zontreck.otemod.OTEMod; import dev.zontreck.otemod.configs.OTEServerConfig; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.item.ItemStack; @@ -67,6 +68,11 @@ public class MobEggEnchantment extends Enchantment CHANCE += bias; double rng = Math.random()*100000; + + if(OTEServerConfig.DEBUG.get()) + { + OTEMod.LOGGER.info("Spawn Egg Chance (" + CHANCE + ") [" + rng + "]"); + } return (rng <= CHANCE); } } diff --git a/src/main/java/dev/zontreck/otemod/events/EventHandler.java b/src/main/java/dev/zontreck/otemod/events/EventHandler.java index 51b467e..c7dbf54 100644 --- a/src/main/java/dev/zontreck/otemod/events/EventHandler.java +++ b/src/main/java/dev/zontreck/otemod/events/EventHandler.java @@ -76,20 +76,16 @@ public class EventHandler { double num = rng.nextDouble(0,100000); 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")); LoreContainer lore = new LoreContainer(head); - LoreEntry entry = new LoreEntry(); - entry.text = ChatHelpers.macroize("!dark_green!Player: " + profile.name_color+profile.username); - entry.bold=true; - lore.miscData.LoreData.add(entry); + LoreEntry entry = new LoreEntry.Builder().bold(true).text(ChatHelpers.macroize("!dark_green!Player: " + profile.name_color+profile.username)).build(); + lore.miscData.loreData.add(entry); - entry = new LoreEntry(); - entry.text = ChatHelpers.macroize("!Dark_Purple!Date: !Dark_Red![0]", Date.from(Instant.now()).toString()); - lore.miscData.LoreData.add(entry); + entry = new LoreEntry.Builder().text(ChatHelpers.macroize("!Dark_Purple!Date: !Dark_Red![0]", Date.from(Instant.now()).toString())).build(); + lore.miscData.loreData.add(entry); - entry = new LoreEntry(); - entry.text = ChatHelpers.macroize("!Dark_Purple!Total Deaths: !Dark_Red![0]", String.valueOf(profile.deaths)); - lore.miscData.LoreData.add(entry); + entry = new LoreEntry.Builder().text(ChatHelpers.macroize("!Dark_Purple!Total Deaths: !Dark_Red![0]", String.valueOf(profile.deaths))).build(); + lore.miscData.loreData.add(entry); lore.commitLore(); diff --git a/src/main/java/dev/zontreck/otemod/events/LoreHandlers.java b/src/main/java/dev/zontreck/otemod/events/LoreHandlers.java index 78abea2..2d18281 100644 --- a/src/main/java/dev/zontreck/otemod/events/LoreHandlers.java +++ b/src/main/java/dev/zontreck/otemod/events/LoreHandlers.java @@ -149,13 +149,7 @@ public class LoreHandlers { CompoundTag props = weaponUsed.getTag(); if(props==null)props=new CompoundTag(); CompoundTag container = props.getCompound(ItemStatTag.STATS_TAG+"_"+type.name().toLowerCase()); - LoreContainer contain; - if(container.isEmpty()) - { - contain = new LoreContainer(weaponUsed); - }else { - contain = new LoreContainer(container, weaponUsed); - } + LoreContainer contain = new LoreContainer(weaponUsed); ItemStatTag isTag; try{ @@ -166,26 +160,17 @@ public class LoreHandlers { isTag.increment(); LoreEntry entry; - if(contain.miscData.LoreData.size()==0) + if(contain.miscData.loreData.size()==0) { // Missing entry - entry = new LoreEntry(); - entry.text = ItemStatistics.makeText(isTag); - contain.miscData.LoreData.add(entry); + entry = new LoreEntry.Builder().text(ItemStatistics.makeText(isTag)).build(); + contain.miscData.loreData.add(entry); }else { - entry = contain.miscData.LoreData.get(0); // Stat is set at 0 + entry = contain.miscData.loreData.get(0); // Stat is set at 0 entry.text = ItemStatistics.makeText(isTag); } // Update item contain.commitLore(); - - // Save the misc data to the item for later - // Reinitialize the container as the contain NBT - container = new CompoundTag(); - contain.save(container); - isTag.save(container); - props.put(ItemStatTag.STATS_TAG+"_"+type.name().toLowerCase(), container); - weaponUsed.setTag(props); } } diff --git a/src/main/java/dev/zontreck/otemod/implementation/compressor/CompressionChamberMenu.java b/src/main/java/dev/zontreck/otemod/implementation/compressor/CompressionChamberMenu.java new file mode 100644 index 0000000..b21b8d9 --- /dev/null +++ b/src/main/java/dev/zontreck/otemod/implementation/compressor/CompressionChamberMenu.java @@ -0,0 +1,158 @@ +package dev.zontreck.otemod.implementation.compressor; + +import dev.zontreck.otemod.blocks.ModBlocks; +import dev.zontreck.otemod.blocks.entity.CompressionChamberBlockEntity; +import dev.zontreck.otemod.blocks.entity.ItemScrubberBlockEntity; +import dev.zontreck.otemod.blocks.entity.ModEntities; +import dev.zontreck.otemod.implementation.inits.ModMenuTypes; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.*; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.items.SlotItemHandler; + +public class CompressionChamberMenu extends AbstractContainerMenu +{ + public final CompressionChamberBlockEntity entity; + public final Level level; + public final ContainerData data; + + public CompressionChamberMenu(int id, Inventory inv, FriendlyByteBuf buf) + { + this(id, inv, inv.player.level().getBlockEntity(buf.readBlockPos()), new SimpleContainerData(1)); + } + + public CompressionChamberMenu(int id, Inventory inv, BlockEntity entity, ContainerData data) + { + super(ModMenuTypes.COMPRESSION_CHAMBER.get(), id); + + checkContainerSize(inv, 1); + + this.data=data; + this.level = entity.getLevel(); + this.entity = (CompressionChamberBlockEntity) entity; + + + addPlayerInventory(inv); + addPlayerHotbar(inv); + + this.entity.getCapability(ForgeCapabilities.ITEM_HANDLER, Direction.UP).ifPresent(handler->{ + addSlot(new SlotItemHandler(handler, 0, 34,34)); + }); + + this.entity.getCapability(ForgeCapabilities.ITEM_HANDLER, Direction.DOWN).ifPresent(handler->{ + addSlot(new SlotItemHandler(handler, 0, 113, 34)); + }); + + + addDataSlots(data); + } + + + + public boolean isCrafting() + { + return data.get(0) > 0; + } + + public int getScaledProgress() + { + if(!isCrafting())return 0; + int progress = this.data.get(0); + int max = CompressionChamberBlockEntity.MAXIMUM_PROCESSING_TICKS; + + int progressArrow = 39; + + + if(progress != 0 && max != 0) + { + int percent = progress * progressArrow / max; + return percent; + } + + return 0; + } + + + // CREDIT GOES TO: diesieben07 | https://github.com/diesieben07/SevenCommons + // must assign a slot number to each of the slots used by the GUI. + // For this container, we can see both the tile inventory's slots as well as the player inventory slots and the hotbar. + // Each time we add a Slot to the container, it automatically increases the slotIndex, which means + // 0 - 8 = hotbar slots (which will map to the InventoryPlayer slot numbers 0 - 8) + // 9 - 35 = player inventory slots (which map to the InventoryPlayer slot numbers 9 - 35) + // 36 - 44 = TileInventory slots, which map to our TileEntity slot numbers 0 - 8) + private static final int HOTBAR_SLOT_COUNT = 9; + private static final int PLAYER_INVENTORY_ROW_COUNT = 3; + private static final int PLAYER_INVENTORY_COLUMN_COUNT = 9; + private static final int PLAYER_INVENTORY_SLOT_COUNT = PLAYER_INVENTORY_COLUMN_COUNT * PLAYER_INVENTORY_ROW_COUNT; + private static final int VANILLA_SLOT_COUNT = HOTBAR_SLOT_COUNT + PLAYER_INVENTORY_SLOT_COUNT; + private static final int VANILLA_FIRST_SLOT_INDEX = 0; + private static final int TE_INVENTORY_FIRST_SLOT_INDEX = VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT; + + // THIS YOU HAVE TO DEFINE! + private static final int TE_INVENTORY_SLOT_COUNT = 2; // must be the number of slots you have! + + @Override + public ItemStack quickMoveStack(Player playerIn, int index) { + Slot sourceSlot = slots.get(index); + if (sourceSlot == null || !sourceSlot.hasItem()) return ItemStack.EMPTY; //EMPTY_ITEM + ItemStack sourceStack = sourceSlot.getItem(); + ItemStack copyOfSourceStack = sourceStack.copy(); + + // Check if the slot clicked is one of the vanilla container slots + if (index < VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT) { + // This is a vanilla container slot so merge the stack into the tile inventory + if (!moveItemStackTo(sourceStack, TE_INVENTORY_FIRST_SLOT_INDEX, TE_INVENTORY_FIRST_SLOT_INDEX + + TE_INVENTORY_SLOT_COUNT, false)) { + return ItemStack.EMPTY; // EMPTY_ITEM + } + } else if (index < TE_INVENTORY_FIRST_SLOT_INDEX + TE_INVENTORY_SLOT_COUNT) { + // This is a TE slot so merge the stack into the players inventory + if (!moveItemStackTo(sourceStack, VANILLA_FIRST_SLOT_INDEX, VANILLA_FIRST_SLOT_INDEX + VANILLA_SLOT_COUNT, false)) { + return ItemStack.EMPTY; + } + } else { + System.out.println("Invalid slotIndex:" + index); + return ItemStack.EMPTY; + } + // If stack size == 0 (the entire stack was moved) set slot contents to null + if (sourceStack.getCount() == 0) { + sourceSlot.set(ItemStack.EMPTY); + } else { + sourceSlot.setChanged(); + } + sourceSlot.onTake(playerIn, sourceStack); + return copyOfSourceStack; + } + + @Override + public boolean stillValid(Player player) { + return stillValid(ContainerLevelAccess.create(level, entity.getBlockPos()), player, ModBlocks.COMPRESSION_CHAMBER_BLOCK.get()); + } + + private static final int PLAYER_INVENTORY_FIRST_SLOT_HEIGHT = 85; + private static final int PLAYER_INVENTORY_FIRST_SLOT_LEFT = 11; + private static final int PLAYER_HOTBAR_FIRST_SLOT = 143; + + private void addPlayerInventory(Inventory inv) + { + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 9; j++) { + this.addSlot(new Slot(inv, j+i*9+9, PLAYER_INVENTORY_FIRST_SLOT_LEFT+j*18, PLAYER_INVENTORY_FIRST_SLOT_HEIGHT+i*18)); + } + } + } + + private void addPlayerHotbar(Inventory inv) + { + for (int index = 0; index < 9; index++) { + this.addSlot(new Slot(inv, index, PLAYER_INVENTORY_FIRST_SLOT_LEFT+index*18, PLAYER_HOTBAR_FIRST_SLOT)); + } + } +} diff --git a/src/main/java/dev/zontreck/otemod/implementation/compressor/CompressionChamberScreen.java b/src/main/java/dev/zontreck/otemod/implementation/compressor/CompressionChamberScreen.java new file mode 100644 index 0000000..4000a7e --- /dev/null +++ b/src/main/java/dev/zontreck/otemod/implementation/compressor/CompressionChamberScreen.java @@ -0,0 +1,99 @@ +package dev.zontreck.otemod.implementation.compressor; + +import com.mojang.blaze3d.systems.RenderSystem; +import dev.zontreck.otemod.OTEMod; +import dev.zontreck.otemod.implementation.MouseHelpers; +import dev.zontreck.otemod.implementation.energy.screenrenderer.EnergyInfoArea; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; + +import java.util.Optional; + +public class CompressionChamberScreen extends AbstractContainerScreen { + + + private static final ResourceLocation TEXTURE = new ResourceLocation(OTEMod.MOD_ID, "textures/gui/energized_compression_chamber.png"); + + private EnergyInfoArea EIA; + + + public CompressionChamberScreen(CompressionChamberMenu pMenu, Inventory pPlayerInventory, Component pTitle) { + super(pMenu, pPlayerInventory, pTitle); + + this.topPos=0; + this.leftPos=0; + + this.imageWidth=176; + this.imageHeight=177; + } + + @Override + protected void init() { + super.init(); + assignEnergyArea(); + } + + private void assignEnergyArea() { + int x = (width - imageWidth )/2; + int y = (height - imageHeight)/2; + + EIA = new EnergyInfoArea(x+63, y+46, menu.entity.getEnergyStorage(), 39, 6); + } + + @Override + protected void renderBg(GuiGraphics guiGraphics, float v, int i, int i1) { + + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderTexture(0, TEXTURE); + + + guiGraphics.blit(TEXTURE, this.leftPos, this.topPos, 0,0, imageWidth, imageHeight); + renderCraftingProgress(guiGraphics); + EIA.draw(guiGraphics); + } + + + @Override + protected void renderLabels(GuiGraphics stack, int mouseX, int mouseY) + { + stack.drawString(font, this.title.getString(), 32, 4, 0xFFFFFF); + + int x = (width - imageWidth )/2; + int y = (height - imageHeight)/2; + renderEnergy(stack, mouseX, mouseY, x, y); + //this.font.draw(stack, this.playerInventoryTitle.getString(), this.leftPos + 17, this.topPos + 123, 0xFFFFFF); + } + + private void renderEnergy(GuiGraphics stack, int mouseX, int mouseY, int x, int y) { + if(isMouseAbove(mouseX, mouseY, x, y, 63, 46, 39, 6)){ + stack.renderTooltip(font, EIA.getTooltips(), Optional.empty(), mouseX-x, mouseY-y); + } + } + + + private void renderCraftingProgress(GuiGraphics stack) + { + if(menu.isCrafting()) + { + stack.blit(TEXTURE, leftPos+63, topPos+34, 179, 11, menu.getScaledProgress(),6); + } + } + + @Override + public void render(GuiGraphics stack, int mouseX, int mouseY, float delta) + { + renderBackground(stack); + super.render(stack, mouseX, mouseY, delta); + renderTooltip(stack, mouseX, mouseY); + } + + private boolean isMouseAbove(int mouseX, int mouseY, int x, int y, int offsetX, int offsetY, int width, int height) + { + return MouseHelpers.isMouseOver(mouseX, mouseY, x+offsetX, y+offsetY, width, height); + } +} diff --git a/src/main/java/dev/zontreck/otemod/implementation/energy/screenrenderer/EnergyInfoArea.java b/src/main/java/dev/zontreck/otemod/implementation/energy/screenrenderer/EnergyInfoArea.java index 006a2c7..344bf7e 100644 --- a/src/main/java/dev/zontreck/otemod/implementation/energy/screenrenderer/EnergyInfoArea.java +++ b/src/main/java/dev/zontreck/otemod/implementation/energy/screenrenderer/EnergyInfoArea.java @@ -39,8 +39,12 @@ public class EnergyInfoArea extends InfoArea { @Override public void draw(GuiGraphics transform) { final int height = area.getHeight(); + final int width = area.getWidth(); int stored = (int)(height*(energy.getEnergyStored()/(float)energy.getMaxEnergyStored())); - transform.fillGradient(area.getX(), area.getY() + (height + stored), area.getX() + area.getWidth(), area.getY() + area.getHeight(), 0xff0000, 0xff550000); + + if(area.getHeight() > area.getWidth()) + transform.fillGradient(area.getX(), area.getY() + (height + stored), area.getX() + area.getWidth(), area.getY() + area.getHeight(), 0xff0000, 0xff550000); + else transform.fillGradient(area.getX() + (width + stored), area.getY(),area.getX() + area.getWidth(), area.getY() + area.getHeight(), 0xff0000, 0xff005500); } } diff --git a/src/main/java/dev/zontreck/otemod/implementation/inits/ModMenuTypes.java b/src/main/java/dev/zontreck/otemod/implementation/inits/ModMenuTypes.java index a13f55f..06dfd3d 100644 --- a/src/main/java/dev/zontreck/otemod/implementation/inits/ModMenuTypes.java +++ b/src/main/java/dev/zontreck/otemod/implementation/inits/ModMenuTypes.java @@ -1,6 +1,7 @@ package dev.zontreck.otemod.implementation.inits; import dev.zontreck.otemod.OTEMod; +import dev.zontreck.otemod.implementation.compressor.CompressionChamberMenu; import dev.zontreck.otemod.implementation.scrubber.ItemScrubberMenu; import dev.zontreck.otemod.implementation.scrubber.MagicalScrubberMenu; import dev.zontreck.otemod.implementation.vault.StarterMenu; @@ -25,6 +26,8 @@ public final class ModMenuTypes public static final RegistryObject> SCRUBBER = registerMenuType(ItemScrubberMenu::new, "item_scrubber_menu"); public static final RegistryObject> MAGIC_SCRUBBER = registerMenuType(MagicalScrubberMenu::new, "magical_scrubber_menu"); + public static final RegistryObject> COMPRESSION_CHAMBER = registerMenuType(CompressionChamberMenu::new, "compression_chamber"); + private static RegistryObject> registerMenuType(IContainerFactory factory, String name) { diff --git a/src/main/java/dev/zontreck/otemod/items/ModItems.java b/src/main/java/dev/zontreck/otemod/items/ModItems.java index 0696e6a..a968fc5 100644 --- a/src/main/java/dev/zontreck/otemod/items/ModItems.java +++ b/src/main/java/dev/zontreck/otemod/items/ModItems.java @@ -4,10 +4,7 @@ import dev.zontreck.otemod.OTEMod; import dev.zontreck.otemod.blocks.FoiledBlockItem; import dev.zontreck.otemod.entities.ModEntityTypes; import dev.zontreck.otemod.implementation.CreativeModeTabs; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.Items; -import net.minecraft.world.item.SimpleFoiledItem; +import net.minecraft.world.item.*; import net.minecraftforge.common.ForgeSpawnEggItem; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.registries.DeferredRegister; @@ -31,7 +28,13 @@ public class ModItems { public static final RegistryObject MELTED_ENDER_PEARL = CreativeModeTabs.addToOTEModTab(ITEMS.register("melted_ender_pearl", () -> new SimpleFoiledItem(new Item.Properties().stacksTo(64)))); - public static final RegistryObject SINGULARITY = CreativeModeTabs.addToOTEModTab(ITEMS.register("singularity", () -> new Item(new Item.Properties().stacksTo(1)))); + public static final RegistryObject SINGULARITY = CreativeModeTabs.addToOTEModTab(ITEMS.register("singularity", () -> new UnstableSingularity(new Item.Properties().stacksTo(1)))); + + public static final RegistryObject COMPRESSED_OBSIDIAN_SHEET = CreativeModeTabs.addToOTEModTab(ITEMS.register("compressed_obsidian_sheet", ()->new Item(new Item.Properties()))); + + public static final RegistryObject LAYERED_COMPRESSED_OBSIDIAN_SHEET = CreativeModeTabs.addToOTEModTab(ITEMS.register("layered_compressed_obsidian_sheet", ()->new SimpleFoiledItem(new Item.Properties()))); + public static final RegistryObject ENCASED_SINGULARITY = CreativeModeTabs.addToOTEModTab(ITEMS.register("encased_singularity", ()->new SimpleFoiledItem(new Item.Properties()))); + public static final RegistryObject ETERNIUM_ROD = CreativeModeTabs.addToOTEModTab(ITEMS.register("eternium_rod", () -> new SimpleFoiledItem(new Item.Properties().stacksTo(64)))); public static final RegistryObject SCRUBBER_FRAME_PIECE = CreativeModeTabs.addToOTEModTab(ITEMS.register("scrubber_frame_piece", () -> new Item(new Item.Properties().stacksTo(64)))); public static final RegistryObject SCRUBBER_FRAME = CreativeModeTabs.addToOTEModTab(ITEMS.register("scrubber_frame", () -> new Item(new Item.Properties().stacksTo(64)))); diff --git a/src/main/java/dev/zontreck/otemod/items/ThrownPossBall.java b/src/main/java/dev/zontreck/otemod/items/ThrownPossBall.java index e68e225..b23f037 100644 --- a/src/main/java/dev/zontreck/otemod/items/ThrownPossBall.java +++ b/src/main/java/dev/zontreck/otemod/items/ThrownPossBall.java @@ -1,5 +1,6 @@ package dev.zontreck.otemod.items; +import dev.zontreck.libzontreck.chat.ChatColor; import dev.zontreck.libzontreck.lore.ExtraLore; import dev.zontreck.libzontreck.lore.LoreContainer; import dev.zontreck.libzontreck.lore.LoreEntry; @@ -86,12 +87,9 @@ public class ThrownPossBall extends ThrowableItemProjectile captured=true; LoreContainer cont = new LoreContainer(getItem()); - cont.miscData.LoreData.clear(); - LoreEntry entry = new LoreEntry(); - entry.bold = true; - entry.text = dev.zontreck.libzontreck.chat.ChatColor.doColors("!Dark_Green!Captured Mob: !Dark_Purple!" + entityName); - - cont.miscData.LoreData.add(entry); + cont.miscData.loreData.clear(); + LoreEntry entry = new LoreEntry.Builder().bold(true).text(ChatColor.doColors("!Dark_Green!Captured Mob: !Dark_Purple!" + entityName)).build(); + cont.miscData.loreData.add(entry); cont.commitLore(); @@ -136,7 +134,7 @@ public class ThrownPossBall extends ThrowableItemProjectile } LoreContainer cont = new LoreContainer(item); - cont.miscData.LoreData.clear(); + cont.miscData.loreData.clear(); cont.commitLore(); if(item.getDamageValue() == 0) diff --git a/src/main/java/dev/zontreck/otemod/items/UnstableSingularity.java b/src/main/java/dev/zontreck/otemod/items/UnstableSingularity.java new file mode 100644 index 0000000..9ac9c04 --- /dev/null +++ b/src/main/java/dev/zontreck/otemod/items/UnstableSingularity.java @@ -0,0 +1,38 @@ +package dev.zontreck.otemod.items; + +import net.minecraft.world.InteractionResult; +import net.minecraft.world.item.SimpleFoiledItem; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Explosion; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; + +public class UnstableSingularity extends SimpleFoiledItem +{ + + public UnstableSingularity(Properties pProperties) { + super(pProperties); + } + + @Override + public InteractionResult useOn(UseOnContext pContext) { + BlockState block = pContext.getLevel().getBlockState(pContext.getClickedPos()); + + if(block.getBlock().defaultDestroyTime() < 0) + { + pContext.getLevel().explode(pContext.getPlayer(), pContext.getClickedPos().getX(), pContext.getClickedPos().getY(), pContext.getClickedPos().getZ(), 16, true, Level.ExplosionInteraction.TNT); + + pContext.getLevel().setBlock(pContext.getClickedPos(), Blocks.AIR.defaultBlockState(), 0, 0); + + pContext.getItemInHand().shrink(1); + + } + + return InteractionResult.CONSUME; + + } +} diff --git a/src/main/java/dev/zontreck/otemod/networking/packets/EnergySyncS2CPacket.java b/src/main/java/dev/zontreck/otemod/networking/packets/EnergySyncS2CPacket.java index 2d5fd14..f540192 100644 --- a/src/main/java/dev/zontreck/otemod/networking/packets/EnergySyncS2CPacket.java +++ b/src/main/java/dev/zontreck/otemod/networking/packets/EnergySyncS2CPacket.java @@ -2,6 +2,7 @@ package dev.zontreck.otemod.networking.packets; import java.util.function.Supplier; +import dev.zontreck.otemod.blocks.entity.CompressionChamberBlockEntity; import dev.zontreck.otemod.blocks.entity.ItemScrubberBlockEntity; import dev.zontreck.otemod.blocks.entity.MagicalScrubberBlockEntity; import net.minecraft.client.Minecraft; @@ -42,6 +43,9 @@ public class EnergySyncS2CPacket { { entity.setEnergy(energy); } else if(Minecraft.getInstance().level.getBlockEntity(pos) instanceof MagicalScrubberBlockEntity entity) + { + entity.setEnergy(energy); + } else if(Minecraft.getInstance().level.getBlockEntity(pos) instanceof CompressionChamberBlockEntity entity) { entity.setEnergy(energy); } diff --git a/src/main/java/dev/zontreck/otemod/recipe/CompressionChamberRecipe.java b/src/main/java/dev/zontreck/otemod/recipe/CompressionChamberRecipe.java new file mode 100644 index 0000000..3da8be6 --- /dev/null +++ b/src/main/java/dev/zontreck/otemod/recipe/CompressionChamberRecipe.java @@ -0,0 +1,99 @@ +package dev.zontreck.otemod.recipe; + +import com.google.gson.JsonObject; +import dev.zontreck.otemod.OTEMod; +import net.minecraft.core.RegistryAccess; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.*; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; + +public class CompressionChamberRecipe implements Recipe { + private final ResourceLocation id; + private final ItemStack output; + private final Ingredient input; + + public CompressionChamberRecipe(ResourceLocation id, ItemStack output, Ingredient input) + { + this.id=id; + this.output=output; + this.input=input; + } + + @Override + public boolean matches(SimpleContainer simpleContainer, Level level) { + if(level.isClientSide) return false; + + return input.test(simpleContainer.getItem(0)); + } + + @Override + public ItemStack assemble(SimpleContainer simpleContainer, RegistryAccess registryAccess) { + return output; + } + + @Override + public boolean canCraftInDimensions(int i, int i1) { + return true; + } + + @Override + public ItemStack getResultItem(RegistryAccess registryAccess) { + return output.copy(); + } + + @Override + public ResourceLocation getId() { + return id; + } + + @Override + public RecipeSerializer getSerializer() { + return Serializer.INSTANCE; + } + + @Override + public RecipeType getType() { + return Type.INSTANCE; + } + + public static class Type implements RecipeType { + private Type(){} + + public static final Type INSTANCE = new Type(); + public static final String ID = "compressing"; + } + + public static class Serializer implements RecipeSerializer + { + public static final Serializer INSTANCE = new Serializer(); + public static final ResourceLocation ID = new ResourceLocation(OTEMod.MOD_ID, Type.ID); + + @Override + public CompressionChamberRecipe fromJson(ResourceLocation resourceLocation, JsonObject jsonObject) { + ItemStack output = ShapedRecipe.itemStackFromJson(GsonHelper.getAsJsonObject(jsonObject, "output")); + + Ingredient input = Ingredient.fromJson(GsonHelper.getAsJsonObject(jsonObject, "input")); + + return new CompressionChamberRecipe(resourceLocation, output, input); + } + + @Override + public @Nullable CompressionChamberRecipe fromNetwork(ResourceLocation resourceLocation, FriendlyByteBuf friendlyByteBuf) { + ItemStack output = friendlyByteBuf.readItem(); + + Ingredient input = Ingredient.fromNetwork(friendlyByteBuf); + return new CompressionChamberRecipe(resourceLocation, output, input); + } + + @Override + public void toNetwork(FriendlyByteBuf friendlyByteBuf, CompressionChamberRecipe compressionChamberRecipe) { + friendlyByteBuf.writeItem(compressionChamberRecipe.output); + compressionChamberRecipe.input.toNetwork(friendlyByteBuf); + } + } +} diff --git a/src/main/java/dev/zontreck/otemod/recipe/ModRecipes.java b/src/main/java/dev/zontreck/otemod/recipe/ModRecipes.java new file mode 100644 index 0000000..c14c726 --- /dev/null +++ b/src/main/java/dev/zontreck/otemod/recipe/ModRecipes.java @@ -0,0 +1,19 @@ +package dev.zontreck.otemod.recipe; + +import dev.zontreck.otemod.OTEMod; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class ModRecipes { + public static final DeferredRegister> SERIALIZERS = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, OTEMod.MOD_ID); + + public static final RegistryObject> COMPRESSING_SERIALIZER = SERIALIZERS.register("compressing", ()->CompressionChamberRecipe.Serializer.INSTANCE); + + public static void register(IEventBus bus) + { + SERIALIZERS.register(bus); + } +} diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 7ac34fa..fd6697d 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -66,7 +66,7 @@ description='''${mod_description}''' [[dependencies.${mod_id}]] modId="libzontreck" mandatory=true - versionRange="[1.9,1.10)" + versionRange="[1.10,1.11)" ordering="NONE" side="BOTH" diff --git a/src/main/resources/assets/otemod/blockstates/compressed_obsidian_block.json b/src/main/resources/assets/otemod/blockstates/compressed_obsidian_block.json new file mode 100644 index 0000000..9ddc5e1 --- /dev/null +++ b/src/main/resources/assets/otemod/blockstates/compressed_obsidian_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "otemod:block/compressed_obsidian_block" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/otemod/blockstates/compression_chamber.json b/src/main/resources/assets/otemod/blockstates/compression_chamber.json new file mode 100644 index 0000000..cd35e73 --- /dev/null +++ b/src/main/resources/assets/otemod/blockstates/compression_chamber.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "otemod:block/compression_chamber" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/otemod/blockstates/layered_compressed_obsidian_block.json b/src/main/resources/assets/otemod/blockstates/layered_compressed_obsidian_block.json new file mode 100644 index 0000000..f6a7840 --- /dev/null +++ b/src/main/resources/assets/otemod/blockstates/layered_compressed_obsidian_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "otemod:block/layered_compressed_obsidian_block" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/otemod/lang/en_us.json b/src/main/resources/assets/otemod/lang/en_us.json index 0bbe9ab..7d2fa73 100644 --- a/src/main/resources/assets/otemod/lang/en_us.json +++ b/src/main/resources/assets/otemod/lang/en_us.json @@ -17,7 +17,7 @@ "item.otemod.melted_ender_pearl": "Melted Ender Pearl", "item.otemod.eternium_ingot": "Eternium Ingot", "item.otemod.eternium_rod": "Eternium Rod", - "item.otemod.singularity": "Singularity", + "item.otemod.singularity": "Unstable Singularity", "item.otemod.scrubber_frame_piece": "Scrubber Frame Component", "item.otemod.scrubber_frame": "Scrubber Frame", "item.otemod.possum_spawn_egg": "Possum Spawn Egg", @@ -39,6 +39,10 @@ "item.otemod.ilusium_dust": "Ilusium Dust", "item.otemod.ilusium_ore": "Raw Ilusium Ore", "item.otemod.empty_spawn_egg": "Empty Spawn Egg", + "item.otemod.compressed_obsidian_sheet": "Sheet of Compressed Obsidian", + "item.otemod.layered_compressed_obsidian_sheet": "Layered Sheet of Compressed Obsidian", + "item.otemod.encased_singularity": "Encased Singualrity", + "item.otemod.encased_singularity.desc": "A singularity encased in stone, ready to be further compressed into bedrock", "block.otemod.eternium_ore_block": "Eternium Ore", @@ -60,6 +64,9 @@ "block.otemod.deepslate_ilusium_ore_block": "Deepslate Ilusium Ore Block", "block.otemod.ilusium_block": "Block of Ilusium", "block.otemod.ilusium_portal": "Ilusium Portal", + "block.otemod.compression_chamber": "Compression Chamber", + "block.otemod.compressed_obsidian_block": "Block of Compressed Obsidian", + "block.otemod.layered_compressed_obsidian_block": "Layered Block of Compressed Obsidian", "enchantment.otemod.mob_egging": "Mob Egging", diff --git a/src/main/resources/assets/otemod/models/block/compressed_obsidian_block.json b/src/main/resources/assets/otemod/models/block/compressed_obsidian_block.json new file mode 100644 index 0000000..12b48b0 --- /dev/null +++ b/src/main/resources/assets/otemod/models/block/compressed_obsidian_block.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "otemod:block/compressed_obsidian_block" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/otemod/models/block/compression_chamber.json b/src/main/resources/assets/otemod/models/block/compression_chamber.json new file mode 100644 index 0000000..38266b0 --- /dev/null +++ b/src/main/resources/assets/otemod/models/block/compression_chamber.json @@ -0,0 +1,86 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "otemod:block/compression_chamber/bottom_plate", + "1": "otemod:block/compression_chamber/support0", + "2": "otemod:block/compression_chamber/power", + "3": "otemod:block/compression_chamber/compression_lid", + "4": "otemod:block/compression_chamber/compressor", + "particle": "otemod:block/compression_chamber/bottom_plate" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 1, 16], + "faces": { + "north": {"uv": [8, 0, 16, 0.5], "texture": "#0"}, + "east": {"uv": [8, 0.5, 16, 1], "texture": "#0"}, + "south": {"uv": [8, 1, 16, 1.5], "texture": "#0"}, + "west": {"uv": [8, 1.5, 16, 2], "texture": "#0"}, + "up": {"uv": [8, 8, 0, 0], "texture": "#0"}, + "down": {"uv": [8, 8, 0, 16], "texture": "#0"} + } + }, + { + "from": [7, 1, 1], + "to": [9, 6, 3], + "faces": { + "north": {"uv": [0, 0, 2, 5], "texture": "#1"}, + "east": {"uv": [2, 0, 4, 5], "texture": "#1"}, + "south": {"uv": [4, 0, 6, 5], "texture": "#1"}, + "west": {"uv": [0, 5, 2, 10], "texture": "#1"}, + "up": {"uv": [4, 7, 2, 5], "texture": "#1"}, + "down": {"uv": [6, 5, 4, 7], "texture": "#1"} + } + }, + { + "from": [4, 4, 0], + "to": [12, 12, 1], + "faces": { + "north": {"uv": [0, 0, 4, 4], "texture": "#2"}, + "east": {"uv": [4, 0, 4.5, 4], "texture": "#2"}, + "south": {"uv": [0, 4, 4, 8], "texture": "#2"}, + "west": {"uv": [4, 4, 4.5, 8], "texture": "#2"}, + "up": {"uv": [8.5, 0.5, 4.5, 0], "texture": "#2"}, + "down": {"uv": [8.5, 0.5, 4.5, 1], "texture": "#2"} + } + }, + { + "from": [7, 9, 1], + "to": [9, 13, 3], + "faces": { + "north": {"uv": [0, 0, 1, 2], "texture": "#1"}, + "east": {"uv": [0, 0, 1, 2], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 2], "texture": "#1"}, + "west": {"uv": [0, 0, 1, 2], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#1"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#1"} + } + }, + { + "from": [2, 12, 3], + "to": [14, 13, 14], + "faces": { + "north": {"uv": [6, 0, 12, 0.5], "texture": "#3"}, + "east": {"uv": [6, 1, 11.5, 1.5], "texture": "#3"}, + "south": {"uv": [6, 0.5, 12, 1], "texture": "#3"}, + "west": {"uv": [6, 1.5, 11.5, 2], "texture": "#3"}, + "up": {"uv": [6, 5.5, 0, 0], "texture": "#3"}, + "down": {"uv": [6, 5.5, 0, 11], "texture": "#3"} + } + }, + { + "from": [3, 11, 4], + "to": [13, 12, 13], + "faces": { + "north": {"uv": [5, 0, 10, 0.5], "texture": "#4"}, + "east": {"uv": [5, 1, 9.5, 1.5], "texture": "#4"}, + "south": {"uv": [5, 0.5, 10, 1], "texture": "#4"}, + "west": {"uv": [5, 1.5, 9.5, 2], "texture": "#4"}, + "up": {"uv": [5, 4.5, 0, 0], "texture": "#4"}, + "down": {"uv": [5, 4.5, 0, 9], "texture": "#4"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/otemod/models/block/layered_compressed_obsidian_block.json b/src/main/resources/assets/otemod/models/block/layered_compressed_obsidian_block.json new file mode 100644 index 0000000..ee18a44 --- /dev/null +++ b/src/main/resources/assets/otemod/models/block/layered_compressed_obsidian_block.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "otemod:block/layered_compressed_obsidian_block" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/otemod/models/item/compressed_obsidian_block.json b/src/main/resources/assets/otemod/models/item/compressed_obsidian_block.json new file mode 100644 index 0000000..551faf2 --- /dev/null +++ b/src/main/resources/assets/otemod/models/item/compressed_obsidian_block.json @@ -0,0 +1,3 @@ +{ + "parent": "otemod:block/compressed_obsidian_block" +} \ No newline at end of file diff --git a/src/main/resources/assets/otemod/models/item/compressed_obsidian_sheet.json b/src/main/resources/assets/otemod/models/item/compressed_obsidian_sheet.json new file mode 100644 index 0000000..ef4deef --- /dev/null +++ b/src/main/resources/assets/otemod/models/item/compressed_obsidian_sheet.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "otemod:item/compressed_obsidian_sheet" + } +} diff --git a/src/main/resources/assets/otemod/models/item/compression_chamber.json b/src/main/resources/assets/otemod/models/item/compression_chamber.json new file mode 100644 index 0000000..901cb9a --- /dev/null +++ b/src/main/resources/assets/otemod/models/item/compression_chamber.json @@ -0,0 +1,3 @@ +{ + "parent": "otemod:block/compression_chamber" +} \ No newline at end of file diff --git a/src/main/resources/assets/otemod/models/item/encased_singularity.json b/src/main/resources/assets/otemod/models/item/encased_singularity.json new file mode 100644 index 0000000..a9c4c74 --- /dev/null +++ b/src/main/resources/assets/otemod/models/item/encased_singularity.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "otemod:item/encased_singularity" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/otemod/models/item/layered_compressed_obsidian_block.json b/src/main/resources/assets/otemod/models/item/layered_compressed_obsidian_block.json new file mode 100644 index 0000000..e61f78c --- /dev/null +++ b/src/main/resources/assets/otemod/models/item/layered_compressed_obsidian_block.json @@ -0,0 +1,3 @@ +{ + "parent": "otemod:block/layered_compressed_obsidian_block" +} \ No newline at end of file diff --git a/src/main/resources/assets/otemod/models/item/layered_compressed_obsidian_sheet.json b/src/main/resources/assets/otemod/models/item/layered_compressed_obsidian_sheet.json new file mode 100644 index 0000000..e2fda7a --- /dev/null +++ b/src/main/resources/assets/otemod/models/item/layered_compressed_obsidian_sheet.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "otemod:item/layered_compressed_obsidian_sheet" + } +} diff --git a/src/main/resources/assets/otemod/textures/block/compression_chamber/bottom_plate.png b/src/main/resources/assets/otemod/textures/block/compression_chamber/bottom_plate.png new file mode 100644 index 0000000..265932b Binary files /dev/null and b/src/main/resources/assets/otemod/textures/block/compression_chamber/bottom_plate.png differ diff --git a/src/main/resources/assets/otemod/textures/block/compression_chamber/compression_lid.png b/src/main/resources/assets/otemod/textures/block/compression_chamber/compression_lid.png new file mode 100644 index 0000000..2b16ff9 Binary files /dev/null and b/src/main/resources/assets/otemod/textures/block/compression_chamber/compression_lid.png differ diff --git a/src/main/resources/assets/otemod/textures/block/compression_chamber/compressor.png b/src/main/resources/assets/otemod/textures/block/compression_chamber/compressor.png new file mode 100644 index 0000000..e914b79 Binary files /dev/null and b/src/main/resources/assets/otemod/textures/block/compression_chamber/compressor.png differ diff --git a/src/main/resources/assets/otemod/textures/block/compression_chamber/power.png b/src/main/resources/assets/otemod/textures/block/compression_chamber/power.png new file mode 100644 index 0000000..8a632c4 Binary files /dev/null and b/src/main/resources/assets/otemod/textures/block/compression_chamber/power.png differ diff --git a/src/main/resources/assets/otemod/textures/block/compression_chamber/support0.png b/src/main/resources/assets/otemod/textures/block/compression_chamber/support0.png new file mode 100644 index 0000000..e0ebd8d Binary files /dev/null and b/src/main/resources/assets/otemod/textures/block/compression_chamber/support0.png differ diff --git a/src/main/resources/assets/otemod/textures/gui/energized_compression_chamber.aseprite b/src/main/resources/assets/otemod/textures/gui/energized_compression_chamber.aseprite new file mode 100644 index 0000000..cf9371c Binary files /dev/null and b/src/main/resources/assets/otemod/textures/gui/energized_compression_chamber.aseprite differ diff --git a/src/main/resources/assets/otemod/textures/gui/energized_compression_chamber.png b/src/main/resources/assets/otemod/textures/gui/energized_compression_chamber.png new file mode 100644 index 0000000..50ca9de Binary files /dev/null and b/src/main/resources/assets/otemod/textures/gui/energized_compression_chamber.png differ diff --git a/src/main/resources/assets/otemod/textures/item/compressed_obsidian_sheet.png b/src/main/resources/assets/otemod/textures/item/compressed_obsidian_sheet.png new file mode 100644 index 0000000..c5aae79 Binary files /dev/null and b/src/main/resources/assets/otemod/textures/item/compressed_obsidian_sheet.png differ diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json index 8f39540..b8ee0ae 100644 --- a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -13,6 +13,9 @@ "otemod:ilusium_ore_block", "otemod:deepslate_ilusium_ore_block", - "otemod:ilusium_block" + "otemod:ilusium_block", + + "otemod:stable_singularity", + "otemod:compression_chamber" ] } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/needs_diamond_tool.json b/src/main/resources/data/minecraft/tags/blocks/needs_diamond_tool.json index bafd7a2..03ed6d1 100644 --- a/src/main/resources/data/minecraft/tags/blocks/needs_diamond_tool.json +++ b/src/main/resources/data/minecraft/tags/blocks/needs_diamond_tool.json @@ -4,6 +4,7 @@ "otemod:aurora_door", "otemod:item_scrubber", "otemod:magical_scrubber", - "otemod:vault_steel_ore_block" + "otemod:vault_steel_ore_block", + "otemod:compression_chamber" ] } \ No newline at end of file diff --git a/src/main/resources/data/otemod/dimension/resource_nether.json b/src/main/resources/data/otemod/dimension/resource_nether.json deleted file mode 100644 index e05ef29..0000000 --- a/src/main/resources/data/otemod/dimension/resource_nether.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "type": "otemod:resource_nether", - "generator": { - "type": "minecraft:noise", - "settings": "otemod:resource_nether", - "biome_source": { - "type": "minecraft:multi_noise", - "biomes": [ - { - "biome": "minecraft:nether_wastes", - "parameters": { - "temperature": 0, - "humidity": 0, - "continentalness": 0, - "erosion": 0, - "weirdness": 0, - "depth": 0, - "offset": 0 - } - }, - { - "biome": "minecraft:soul_sand_valley", - "parameters": { - "temperature": 0, - "humidity": -0.5, - "continentalness": 0, - "erosion": 0, - "weirdness": 0, - "depth": 0, - "offset": 0 - } - }, - { - "biome": "minecraft:crimson_forest", - "parameters": { - "temperature": 0.4, - "humidity": 0, - "continentalness": 0, - "erosion": 0, - "weirdness": 0, - "depth": 0, - "offset": 0 - } - }, - { - "biome": "minecraft:warped_forest", - "parameters": { - "temperature": 0, - "humidity": 0.5, - "continentalness": 0, - "erosion": 0, - "weirdness": 0, - "depth": 0, - "offset": 0.375 - } - }, - { - "biome": "minecraft:basalt_deltas", - "parameters": { - "temperature": -0.5, - "humidity": 0, - "continentalness": 0, - "erosion": 0, - "weirdness": 0, - "depth": 0, - "offset": 0.175 - } - } - ] - } - } -} diff --git a/src/main/resources/data/otemod/dimension_type/resource_nether.json b/src/main/resources/data/otemod/dimension_type/resource_nether.json deleted file mode 100644 index 93ec829..0000000 --- a/src/main/resources/data/otemod/dimension_type/resource_nether.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "ultrawarm": true, - "natural": false, - "piglin_safe": true, - "respawn_anchor_works": true, - "bed_works": false, - "has_raids": false, - "has_skylight": false, - "has_ceiling": true, - "coordinate_scale": 16, - "ambient_light": 1, - "fixed_time": 1, - "logical_height": 128, - "effects": "minecraft:the_end", - "infiniburn": "#minecraft:infiniburn_nether", - "min_y": 0, - "height": 256, - "monster_spawn_light_level": 0, - "monster_spawn_block_light_limit": 0 -} diff --git a/src/main/resources/data/otemod/forge/biome_modifier/vaultsteel_placer_nether.json b/src/main/resources/data/otemod/forge/biome_modifier/vaultsteel_placer_nether.json new file mode 100644 index 0000000..ea3c538 --- /dev/null +++ b/src/main/resources/data/otemod/forge/biome_modifier/vaultsteel_placer_nether.json @@ -0,0 +1,6 @@ +{ + "type": "forge:add_features", + "features": ["otemod:vaultsteel_oregen_nether"], + "biomes": "#is_nether", + "step": "underground_ores" +} \ No newline at end of file diff --git a/src/main/resources/data/otemod/recipes/bedrock.json b/src/main/resources/data/otemod/recipes/bedrock.json new file mode 100644 index 0000000..c3afc9d --- /dev/null +++ b/src/main/resources/data/otemod/recipes/bedrock.json @@ -0,0 +1,9 @@ +{ + "type": "otemod:compressing", + "output": { + "item": "minecraft:bedrock" + }, + "input": { + "item": "otemod:encased_singularity" + } +} \ No newline at end of file diff --git a/src/main/resources/data/otemod/recipes/compressed_obsidian_block.json b/src/main/resources/data/otemod/recipes/compressed_obsidian_block.json new file mode 100644 index 0000000..4b09fb0 --- /dev/null +++ b/src/main/resources/data/otemod/recipes/compressed_obsidian_block.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "QQQ", + "QQQ", + "QQQ" + ], + "key": { + "Q": { + "item": "otemod:compressed_obsidian_sheet" + } + }, + "result": { + "item": "otemod:compressed_obsidian_block", + "count": 1 + } +} diff --git a/src/main/resources/data/otemod/recipes/compressed_obsidian_sheet.json b/src/main/resources/data/otemod/recipes/compressed_obsidian_sheet.json new file mode 100644 index 0000000..307f5d2 --- /dev/null +++ b/src/main/resources/data/otemod/recipes/compressed_obsidian_sheet.json @@ -0,0 +1,9 @@ +{ + "type": "otemod:compressing", + "input": { + "item": "minecraft:obsidian" + }, + "output": { + "item": "otemod:compressed_obsidian_sheet" + } +} \ No newline at end of file diff --git a/src/main/resources/data/otemod/recipes/compression_chamber.json b/src/main/resources/data/otemod/recipes/compression_chamber.json new file mode 100644 index 0000000..10c3c53 --- /dev/null +++ b/src/main/resources/data/otemod/recipes/compression_chamber.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "XXX", + "WYZ", + "ZZZ" + ], + "key": { + "W": { + "tag": "forge:ingots/gold" + }, + "X": { + "tag": "forge:ingots/ilusium" + }, + "Y": { + "item": "minecraft:copper_block" + }, + "Z": { + "item": "minecraft:obsidian" + } + }, + "result": { + "item": "otemod:compression_chamber", + "count": 1 + } +} diff --git a/src/main/resources/data/otemod/recipes/encased_singularity.json b/src/main/resources/data/otemod/recipes/encased_singularity.json new file mode 100644 index 0000000..d91b42b --- /dev/null +++ b/src/main/resources/data/otemod/recipes/encased_singularity.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "QQQ", + "QZQ", + "QQQ" + ], + "key": { + "Q": { + "tag": "forge:blocks/stone" + }, + "Z": { + "item": "otemod:stable_singularity" + } + }, + "result": { + "item": "otemod:encased_singularity", + "count": 1 + } +} diff --git a/src/main/resources/data/otemod/recipes/layered_compressed_obsidian_block.json b/src/main/resources/data/otemod/recipes/layered_compressed_obsidian_block.json new file mode 100644 index 0000000..2ab6a55 --- /dev/null +++ b/src/main/resources/data/otemod/recipes/layered_compressed_obsidian_block.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "QQQ", + "QQQ", + "QQQ" + ], + "key": { + "Q": { + "item": "otemod:layered_compressed_obsidian_sheet" + } + }, + "result": { + "item": "otemod:layered_compressed_obsidian_block", + "count": 1 + } +} diff --git a/src/main/resources/data/otemod/recipes/layered_compressed_obsidian_sheet.json b/src/main/resources/data/otemod/recipes/layered_compressed_obsidian_sheet.json new file mode 100644 index 0000000..719a636 --- /dev/null +++ b/src/main/resources/data/otemod/recipes/layered_compressed_obsidian_sheet.json @@ -0,0 +1,9 @@ +{ + "type": "otemod:compressing", + "output": { + "item": "otemod:layered_compressed_obsidian_sheet" + }, + "input": { + "item": "otemod:compressed_obsidian_block" + } +} \ No newline at end of file diff --git a/src/main/resources/data/otemod/recipes/layered_obsidian_decompress.json b/src/main/resources/data/otemod/recipes/layered_obsidian_decompress.json new file mode 100644 index 0000000..e8c74b2 --- /dev/null +++ b/src/main/resources/data/otemod/recipes/layered_obsidian_decompress.json @@ -0,0 +1,12 @@ +{ + "type": "mekanism:crushing", + "input": { + "ingredient": { + "item": "otemod:layered_compressed_obsidian_block" + } + }, + "output": { + "item": "otemod:compressed_obsidian_block", + "count": 9 + } +} diff --git a/src/main/resources/data/otemod/recipes/obsidian_decompress.json b/src/main/resources/data/otemod/recipes/obsidian_decompress.json new file mode 100644 index 0000000..7dda5f9 --- /dev/null +++ b/src/main/resources/data/otemod/recipes/obsidian_decompress.json @@ -0,0 +1,12 @@ +{ + "type": "mekanism:crushing", + "input": { + "ingredient": { + "item": "otemod:compressed_obsidian_block" + } + }, + "output": { + "item": "minecraft:obsidian", + "count": 9 + } +} diff --git a/src/main/resources/data/otemod/recipes/stable_singularity.json b/src/main/resources/data/otemod/recipes/stable_singularity.json index e0d31a5..95aa3f5 100644 --- a/src/main/resources/data/otemod/recipes/stable_singularity.json +++ b/src/main/resources/data/otemod/recipes/stable_singularity.json @@ -1,16 +1,9 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": ["ccc", "cbc", "ccc"], - "key": { - "c": { - "item": "minecraft:obsidian" - }, - "b": { - "item": "otemod:singularity" - } - }, - "result": { - "item": "otemod:stable_singularity", - "count": 1 - } -} +{ + "type": "otemod:compressing", + "output": { + "item": "otemod:stable_singularity" + }, + "input": { + "item": "otemod:layered_compressed_obsidian_block" + } +} \ No newline at end of file diff --git a/src/main/resources/data/otemod/recipes/tetra/seeping_bedrock.json b/src/main/resources/data/otemod/recipes/tetra/seeping_bedrock.json new file mode 100644 index 0000000..f19f69e --- /dev/null +++ b/src/main/resources/data/otemod/recipes/tetra/seeping_bedrock.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "CCC", + "CGC", + "CCC" + ], + "key": { + "C": { + "item": "minecraft:magma_block" + }, + "G": { + "item": "minecraft:bedrock" + } + }, + "result": { + "item": "tetra:seeping_bedrock", + "count": 1 + } +} diff --git a/src/main/resources/data/otemod/recipes/singularity.json b/src/main/resources/data/otemod/recipes/unstable_singularity.json similarity index 55% rename from src/main/resources/data/otemod/recipes/singularity.json rename to src/main/resources/data/otemod/recipes/unstable_singularity.json index 2bfe6d0..c0ea324 100644 --- a/src/main/resources/data/otemod/recipes/singularity.json +++ b/src/main/resources/data/otemod/recipes/unstable_singularity.json @@ -1,13 +1,16 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": ["ccc", "c c", "ccc"], - "key": { - "c": { - "item": "otemod:melted_ender_pearl" - } - }, - "result": { - "item": "otemod:singularity", - "count": 1 - } -} +{ + "type": "minecraft:crafting_shaped", + "pattern": ["cb"], + "key": { + "c": { + "item": "minecraft:feather" + }, + "b": { + "item": "otemod:stable_singularity" + } + }, + "result": { + "item": "otemod:singularity", + "count": 1 + } +} diff --git a/src/main/resources/data/otemod/worldgen/configured_feature/vaultsteel_oregen_nether.json b/src/main/resources/data/otemod/worldgen/configured_feature/vaultsteel_oregen_nether.json new file mode 100644 index 0000000..649898f --- /dev/null +++ b/src/main/resources/data/otemod/worldgen/configured_feature/vaultsteel_oregen_nether.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:scattered_ore", + "config": { + "size": 2, + "discard_chance_on_air_exposure": 1, + "targets": [ + { + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:base_stone_nether" + }, + "state": { + "Name": "otemod:nether_vault_steel_ore_block" + } + } + ] + } +} diff --git a/src/main/resources/data/otemod/worldgen/noise_settings/resource_nether.json b/src/main/resources/data/otemod/worldgen/noise_settings/resource_nether.json deleted file mode 100644 index a3b5338..0000000 --- a/src/main/resources/data/otemod/worldgen/noise_settings/resource_nether.json +++ /dev/null @@ -1,737 +0,0 @@ -{ - "sea_level": 32, - "disable_mob_generation": true, - "aquifers_enabled": true, - "ore_veins_enabled": true, - "legacy_random_source": true, - "default_block": { - "Name": "minecraft:netherrack" - }, - "default_fluid": { - "Name": "minecraft:lava", - "Properties": { - "level": "0" - } - }, - "noise": { - "min_y": 0, - "height": 128, - "size_horizontal": 1, - "size_vertical": 2 - }, - "noise_router": { - "barrier": 0, - "fluid_level_floodedness": 0, - "fluid_level_spread": 0, - "lava": 0, - "temperature": { - "type": "minecraft:shifted_noise", - "noise": "minecraft:temperature", - "xz_scale": 0.25, - "y_scale": 0, - "shift_x": "minecraft:shift_x", - "shift_y": 0, - "shift_z": "minecraft:shift_z" - }, - "vegetation": { - "type": "minecraft:shifted_noise", - "noise": "minecraft:vegetation", - "xz_scale": 0.25, - "y_scale": 0, - "shift_x": "minecraft:shift_x", - "shift_y": 0, - "shift_z": "minecraft:shift_z" - }, - "continents": 0, - "erosion": 0, - "depth": 0, - "ridges": 0, - "initial_density_without_jaggedness": 0, - "final_density": { - "type": "minecraft:squeeze", - "argument": { - "type": "minecraft:mul", - "argument1": 0.64, - "argument2": { - "type": "minecraft:interpolated", - "argument": { - "type": "minecraft:blend_density", - "argument": { - "type": "minecraft:add", - "argument1": 2.5, - "argument2": { - "type": "minecraft:mul", - "argument1": { - "type": "minecraft:y_clamped_gradient", - "from_y": -8, - "to_y": 24, - "from_value": 0, - "to_value": 1 - }, - "argument2": { - "type": "minecraft:add", - "argument1": -2.5, - "argument2": { - "type": "minecraft:add", - "argument1": 0.9375, - "argument2": { - "type": "minecraft:mul", - "argument1": { - "type": "minecraft:y_clamped_gradient", - "from_y": 104, - "to_y": 128, - "from_value": 1, - "to_value": 0 - }, - "argument2": { - "type": "minecraft:add", - "argument1": -0.9375, - "argument2": "minecraft:nether/base_3d_noise" - } - } - } - } - } - } - } - } - } - }, - "vein_toggle": 0, - "vein_ridged": 0, - "vein_gap": 0 - }, - "spawn_target": [], - "surface_rule": { - "type": "minecraft:sequence", - "sequence": [ - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:vertical_gradient", - "random_name": "minecraft:bedrock_floor", - "true_at_and_below": { - "above_bottom": 0 - }, - "false_at_and_above": { - "above_bottom": 5 - } - }, - "then_run": { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:bedrock" - } - } - }, - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:not", - "invert": { - "type": "minecraft:vertical_gradient", - "random_name": "minecraft:bedrock_roof", - "true_at_and_below": { - "below_top": 5 - }, - "false_at_and_above": { - "below_top": 0 - } - } - }, - "then_run": { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:bedrock" - } - } - }, - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:y_above", - "anchor": { - "below_top": 5 - }, - "surface_depth_multiplier": 0, - "add_stone_depth": false - }, - "then_run": { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:netherrack" - } - } - }, - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:biome", - "biome_is": [ - "minecraft:basalt_deltas" - ] - }, - "then_run": { - "type": "minecraft:sequence", - "sequence": [ - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:stone_depth", - "offset": 0, - "surface_type": "ceiling", - "add_surface_depth": true, - "secondary_depth_range": 0 - }, - "then_run": { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:basalt", - "Properties": { - "axis": "y" - } - } - } - }, - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:stone_depth", - "offset": 0, - "surface_type": "floor", - "add_surface_depth": true, - "secondary_depth_range": 0 - }, - "then_run": { - "type": "minecraft:sequence", - "sequence": [ - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:noise_threshold", - "noise": "minecraft:patch", - "min_threshold": -0.012, - "max_threshold": 1.7976931348623157e+308 - }, - "then_run": { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:y_above", - "anchor": { - "absolute": 30 - }, - "surface_depth_multiplier": 0, - "add_stone_depth": true - }, - "then_run": { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:not", - "invert": { - "type": "minecraft:y_above", - "anchor": { - "absolute": 35 - }, - "surface_depth_multiplier": 0, - "add_stone_depth": true - } - }, - "then_run": { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:gravel" - } - } - } - } - }, - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:noise_threshold", - "noise": "minecraft:nether_state_selector", - "min_threshold": 0, - "max_threshold": 1.7976931348623157e+308 - }, - "then_run": { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:basalt", - "Properties": { - "axis": "y" - } - } - } - }, - { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:blackstone" - } - } - ] - } - } - ] - } - }, - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:biome", - "biome_is": [ - "minecraft:soul_sand_valley" - ] - }, - "then_run": { - "type": "minecraft:sequence", - "sequence": [ - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:stone_depth", - "offset": 0, - "surface_type": "ceiling", - "add_surface_depth": true, - "secondary_depth_range": 0 - }, - "then_run": { - "type": "minecraft:sequence", - "sequence": [ - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:noise_threshold", - "noise": "minecraft:nether_state_selector", - "min_threshold": 0, - "max_threshold": 1.7976931348623157e+308 - }, - "then_run": { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:soul_sand" - } - } - }, - { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:soul_soil" - } - } - ] - } - }, - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:stone_depth", - "offset": 0, - "surface_type": "floor", - "add_surface_depth": true, - "secondary_depth_range": 0 - }, - "then_run": { - "type": "minecraft:sequence", - "sequence": [ - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:noise_threshold", - "noise": "minecraft:patch", - "min_threshold": -0.012, - "max_threshold": 1.7976931348623157e+308 - }, - "then_run": { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:y_above", - "anchor": { - "absolute": 30 - }, - "surface_depth_multiplier": 0, - "add_stone_depth": true - }, - "then_run": { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:not", - "invert": { - "type": "minecraft:y_above", - "anchor": { - "absolute": 35 - }, - "surface_depth_multiplier": 0, - "add_stone_depth": true - } - }, - "then_run": { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:gravel" - } - } - } - } - }, - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:noise_threshold", - "noise": "minecraft:nether_state_selector", - "min_threshold": 0, - "max_threshold": 1.7976931348623157e+308 - }, - "then_run": { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:soul_sand" - } - } - }, - { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:soul_soil" - } - } - ] - } - } - ] - } - }, - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:stone_depth", - "offset": 0, - "surface_type": "floor", - "add_surface_depth": false, - "secondary_depth_range": 0 - }, - "then_run": { - "type": "minecraft:sequence", - "sequence": [ - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:not", - "invert": { - "type": "minecraft:y_above", - "anchor": { - "absolute": 32 - }, - "surface_depth_multiplier": 0, - "add_stone_depth": false - } - }, - "then_run": { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:hole" - }, - "then_run": { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:lava", - "Properties": { - "level": "0" - } - } - } - } - }, - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:biome", - "biome_is": [ - "minecraft:warped_forest" - ] - }, - "then_run": { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:not", - "invert": { - "type": "minecraft:noise_threshold", - "noise": "minecraft:netherrack", - "min_threshold": 0.54, - "max_threshold": 1.7976931348623157e+308 - } - }, - "then_run": { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:y_above", - "anchor": { - "absolute": 31 - }, - "surface_depth_multiplier": 0, - "add_stone_depth": false - }, - "then_run": { - "type": "minecraft:sequence", - "sequence": [ - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:noise_threshold", - "noise": "minecraft:nether_wart", - "min_threshold": 1.17, - "max_threshold": 1.7976931348623157e+308 - }, - "then_run": { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:warped_wart_block" - } - } - }, - { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:warped_nylium" - } - } - ] - } - } - } - }, - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:biome", - "biome_is": [ - "minecraft:crimson_forest" - ] - }, - "then_run": { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:not", - "invert": { - "type": "minecraft:noise_threshold", - "noise": "minecraft:netherrack", - "min_threshold": 0.54, - "max_threshold": 1.7976931348623157e+308 - } - }, - "then_run": { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:y_above", - "anchor": { - "absolute": 31 - }, - "surface_depth_multiplier": 0, - "add_stone_depth": false - }, - "then_run": { - "type": "minecraft:sequence", - "sequence": [ - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:noise_threshold", - "noise": "minecraft:nether_wart", - "min_threshold": 1.17, - "max_threshold": 1.7976931348623157e+308 - }, - "then_run": { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:nether_wart_block" - } - } - }, - { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:crimson_nylium" - } - } - ] - } - } - } - } - ] - } - }, - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:biome", - "biome_is": [ - "minecraft:nether_wastes" - ] - }, - "then_run": { - "type": "minecraft:sequence", - "sequence": [ - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:stone_depth", - "offset": 0, - "surface_type": "floor", - "add_surface_depth": true, - "secondary_depth_range": 0 - }, - "then_run": { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:noise_threshold", - "noise": "minecraft:soul_sand_layer", - "min_threshold": -0.012, - "max_threshold": 1.7976931348623157e+308 - }, - "then_run": { - "type": "minecraft:sequence", - "sequence": [ - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:not", - "invert": { - "type": "minecraft:hole" - } - }, - "then_run": { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:y_above", - "anchor": { - "absolute": 30 - }, - "surface_depth_multiplier": 0, - "add_stone_depth": true - }, - "then_run": { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:not", - "invert": { - "type": "minecraft:y_above", - "anchor": { - "absolute": 35 - }, - "surface_depth_multiplier": 0, - "add_stone_depth": true - } - }, - "then_run": { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:soul_sand" - } - } - } - } - }, - { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:netherrack" - } - } - ] - } - } - }, - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:stone_depth", - "offset": 0, - "surface_type": "floor", - "add_surface_depth": false, - "secondary_depth_range": 0 - }, - "then_run": { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:y_above", - "anchor": { - "absolute": 31 - }, - "surface_depth_multiplier": 0, - "add_stone_depth": false - }, - "then_run": { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:not", - "invert": { - "type": "minecraft:y_above", - "anchor": { - "absolute": 35 - }, - "surface_depth_multiplier": 0, - "add_stone_depth": true - } - }, - "then_run": { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:noise_threshold", - "noise": "minecraft:gravel_layer", - "min_threshold": -0.012, - "max_threshold": 1.7976931348623157e+308 - }, - "then_run": { - "type": "minecraft:sequence", - "sequence": [ - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:y_above", - "anchor": { - "absolute": 32 - }, - "surface_depth_multiplier": 0, - "add_stone_depth": false - }, - "then_run": { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:gravel" - } - } - }, - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:not", - "invert": { - "type": "minecraft:hole" - } - }, - "then_run": { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:gravel" - } - } - } - ] - } - } - } - } - } - ] - } - }, - { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:netherrack" - } - } - ] - } -} diff --git a/src/main/resources/data/otemod/worldgen/placed_feature/vaultsteel_oregen_nether.json b/src/main/resources/data/otemod/worldgen/placed_feature/vaultsteel_oregen_nether.json new file mode 100644 index 0000000..9385e8c --- /dev/null +++ b/src/main/resources/data/otemod/worldgen/placed_feature/vaultsteel_oregen_nether.json @@ -0,0 +1,23 @@ +{ + "feature": "otemod:vaultsteel_oregen_nether", + "placement": [ + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:trapezoid", + "min_inclusive": { + "absolute": 8 + }, + "max_inclusive": { + "absolute": 24 + } + } + }, + { + "type": "minecraft:biome" + } + ] +}