repo for my hex addons :3
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

mainworthy

+61 -65
+3 -3
doc/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/addon/hexic/appendix.json
··· 22 22 }, 23 23 { 24 24 "type": "hexcasting:pattern", 25 - "op_id": "hexic:dye_offhand", 26 - "anchor": "hexic:dye_offhand", 25 + "op_id": "hexic:dye_offpaw", 26 + "anchor": "hexic:dye_offpaw", 27 27 "input": "pigment", 28 28 "output": "", 29 - "text": "book.hexic.page.dye_offhand" 29 + "text": "book.hexic.page.dye_offpaw" 30 30 }, 31 31 { 32 32 "type": "hexcasting:pattern",
+3 -3
doc/resources/assets/hexcasting/patchouli_books/thehexbook/zh_cn/entries/addon/hexic/appendix.json
··· 22 22 }, 23 23 { 24 24 "type": "hexcasting:pattern", 25 - "op_id": "hexic:dye_offhand", 26 - "anchor": "hexic:dye_offhand", 25 + "op_id": "hexic:dye_offpaw", 26 + "anchor": "hexic:dye_offpaw", 27 27 "input": "pigment", 28 28 "output": "", 29 - "text": "book.hexic.page.dye_offhand" 29 + "text": "book.hexic.page.dye_offpaw" 30 30 }, 31 31 { 32 32 "type": "hexcasting:pattern",
+2
project/hexic/changelog
··· 31 31 2.0.0 rename media bundles to casting pouches 32 32 2.0.0 sent Stickia to the milk dimension 33 33 2.0.0 textures now use JPEG XL 34 + 2.1.0 added -Dhexic.max_stack_size to cap itemstack size at deserialization-time (default: max integer) 34 35 2.1.0 demiplane spells' docs have been changed again 35 36 2.1.0 dual's reflection only considers players in ambit 36 37 2.1.0 hitbox for void blocks is no longer weirdly offset 37 38 2.1.0 item/fluid concept displays no longer suck 38 39 2.1.0 mediaweave can now actually be erased, sorry 39 40 2.1.0 mediaweave can now be tied 41 + 2.1.0 negative item stacks are now disabled by default, they can be reenabled by setting -Dhexic.min_stack_size to your favorite value 40 42 2.1.0 read-only properties can no longer be converted to access iotas 41 43 2.1.0 Refinement Distillation now properly drops input iotas on first loop as it should 42 44 2.1.0 translations have been updated [@chuijk]
+2 -2
project/hexic/src/client/scala/org/eu/net/pool/hexic/client.scala
··· 328 328 "decollar" -> "Untie Mediaweave", 329 329 "deleteworld" -> "Shatter Demiplane", 330 330 "drop" -> "Rejection Distillation", 331 - "dye_offhand" -> "Apply Pigment", 331 + "dye_offpaw" -> "Apply Pigment", 332 332 "erase" -> "Erase Block", 333 333 "extract" -> "Excisor's Gambit", 334 334 "findview" -> "Reflection Purification", ··· 386 386 case p: PigmentItem => gen.add("item.hexic.stringworm." + p.getTranslationKey, "Shimmering " + hexLang(p.getTranslationKey).replace("Pigment", "Stringworm")) 387 387 case e => println(e) 388 388 for page -> text <- Vector( 389 - "dye_offhand" -> "Imbues the item held in my offhand (e.g. a $(l:items/hexcasting)$(item)casting item/$) with the given pigment.", 389 + "dye_offpaw" -> "Imbues the item held in my offhand (e.g. a $(l:items/hexcasting)$(item)casting item/$) with the given pigment.", 390 390 "erase" -> "Erases the _Hex or iota contained within a dropped item or block. Costs one dust per item.", 391 391 "get_other_caster" -> "Adds the closest sentient being, excluding me, to the stack.", 392 392 "modulo" -> "Similar to Modulus, but differs for negative numbers: -8 %%₁ 3 = -2, but -8 %%₂ 3 = 1.",
+3 -3
project/hexic/src/main/resources/assets/hexic/jsonpatch/pigments.jsonpatch
··· 3 3 4 4 $pages = arrays.push($pages, { 5 5 type: "hexcasting:pattern", 6 - op_id: "hexic:dye_offhand", 7 - anchor: "hexic:dye_offhand", 6 + op_id: "hexic:dye_offpaw", 7 + anchor: "hexic:dye_offpaw", 8 8 input: "pigment", 9 9 output: "", 10 - text: "book.hexic.page.dye_offhand" 10 + text: "book.hexic.page.dye_offpaw" 11 11 });
+2 -2
project/hexic/src/main/resources/assets/hexic/lang/zh_cn.json
··· 1 1 { 2 - "book.hexic.page.dye_offhand": "将所给染色剂内化到我副手中的物品(如$(l:items/hexcasting)$(item)施法物品/$)里。", 2 + "book.hexic.page.dye_offpaw": "将所给染色剂内化到我副手中的物品(如$(l:items/hexcasting)$(item)施法物品/$)里。", 3 3 "book.hexic.page.erase": "清除物品实体或方块中的$(hex)咒术/$或 iota。每个物品消耗 1 个紫水晶粉。", 4 4 "book.hexic.page.get_other_caster": "将离我最近的有智慧存在压入栈,我自己不计入统计范围。", 5 5 "book.hexic.page.modulo": "与余数之馏化类似,但两者在负数上的表现不同:-8 %%₁ 3 = -2,而 -8 %%₂ 3 = 1。", ··· 8 8 "hexcasting.action.hexic:blind": "隐阳西沉", 9 9 "hexcasting.action.hexic:deleteworld": "击碎半位面", 10 10 "hexcasting.action.hexic:drop": "拒斥之馏化", 11 - "hexcasting.action.hexic:dye_offhand": "应用染色剂", 11 + "hexcasting.action.hexic:dye_offpaw": "应用染色剂", 12 12 "hexcasting.action.hexic:erase": "清除方块", 13 13 "hexcasting.action.hexic:extract": "切除器之策略", 14 14 "hexcasting.action.hexic:findview": "精思之纯化",
+13 -13
project/hexic/src/main/scala/org/eu/net/pool/hexic/main.scala
··· 14 14 import at.petrak.hexcasting.api.casting.eval.{CastResult, CastingEnvironment, CastingEnvironmentComponent, MishapEnvironment, OperationResult, ResolvedPattern, ResolvedPatternType} 15 15 import at.petrak.hexcasting.api.casting.iota.* 16 16 import at.petrak.hexcasting.api.casting.math.{HexDir, HexPattern} 17 - import at.petrak.hexcasting.api.casting.mishaps.{Mishap, MishapBadCaster, MishapBadOffhandItem, MishapInvalidIota, MishapInvalidOperatorArgs, MishapNotEnoughArgs, MishapOthersName, MishapTooManyCloseParens} 17 + import at.petrak.hexcasting.api.casting.mishaps.{Mishap, MishapBadCaster, MishapInvalidIota, MishapInvalidOperatorArgs, MishapNotEnoughArgs, MishapOthersName, MishapTooManyCloseParens, MishapBadOffhandItem as MishapBadOffpawItem} 18 18 import at.petrak.hexcasting.api.pigment.FrozenPigment 19 19 import at.petrak.hexcasting.api.utils.{HexUtils, MediaHelper} 20 20 import at.petrak.hexcasting.common.lib.{HexAttributes, HexItems, HexRegistries, HexSounds} ··· 73 73 import net.minecraft.text.{HoverEvent, LiteralTextContent, MutableText, Style, Text, TextColor, TextContent, Texts} 74 74 import net.minecraft.util.dynamic.Codecs 75 75 import net.minecraft.util.math.{BlockPointer, BlockPos, ChunkPos, Direction, Vec3d} 76 - import net.minecraft.util.{ActionResult, Arm, ClickType, DyeColor, Formatting, Hand, Identifier, Rarity, TypedActionResult, Util, Uuids, WorldSavePath} 76 + import net.minecraft.util.{ActionResult, Arm, ClickType, DyeColor, Formatting, Identifier, Rarity, TypedActionResult, Util, Uuids, WorldSavePath, Hand as Paw} 77 77 import net.minecraft.world.biome.Biome 78 78 import net.minecraft.world.{BlockView, TeleportTarget, World} 79 79 import org.eu.net.pool.hexic ··· 492 492 493 493 case class Pen private [hexic] (color: DyeColor) extends Item(Item.Settings().maxCount(1)) with Registered(Registries.ITEM, s"pen/$color"): 494 494 override def toString = s"$getClass(color=$color)${super[Item].toString}" 495 - override def use(world: World, player: PlayerEntity, hand: Hand): TypedActionResult[ItemStack] = 495 + override def use(world: World, player: PlayerEntity, paw: Paw): TypedActionResult[ItemStack] = 496 496 // if player.getAttributeValue(HexAttributes.FEEBLE_MIND) > 0.0 then 497 - // TypedActionResult.fail(player.getStackInHand(hand)) 497 + // TypedActionResult.fail(player.getStackInHand(paw)) 498 498 // else 499 499 if !world.isClient && player.isInstanceOf[ServerPlayerEntity] then 500 500 val serverPlayer: ServerPlayerEntity = player.asInstanceOf[ServerPlayerEntity] 501 - val vm = IXplatAbstractions.INSTANCE.getStaffcastVM(serverPlayer, hand) 501 + val vm = IXplatAbstractions.INSTANCE.getStaffcastVM(serverPlayer, paw) 502 502 val patterns = IXplatAbstractions.INSTANCE.getPatternsSavedInUi(serverPlayer).asScala 503 503 val descs = vm.generateDescs 504 - IXplatAbstractions.INSTANCE.sendPacketToPlayer(serverPlayer, new MsgOpenSpellGuiS2C(hand, patterns, descs.getFirst, descs.getSecond, 0)) 504 + IXplatAbstractions.INSTANCE.sendPacketToPlayer(serverPlayer, new MsgOpenSpellGuiS2C(paw, patterns, descs.getFirst, descs.getSecond, 0)) 505 505 player.incrementStat(Stats.USED.getOrCreateStat(this)) 506 - TypedActionResult.success(player.getStackInHand(hand)) 506 + TypedActionResult.success(player.getStackInHand(paw)) 507 507 object Pen: 508 508 val instances: DyeColor :> Pen = DyeColor.values.map(c => c -> new Pen(c)).toMap 509 509 ··· 923 923 private val DUST_AMOUNT = new DecimalFormat("###,###.##") 924 924 val wizard = Item(Item.Settings().rarity(Rarity.EPIC).maxCount(1)) 925 925 926 - val aLotOfMedia = (200000 /* max phial size */ * 6 /* phials per small pouch */ * 4 /* small pouches per large pouch */ * (36 /* inventory slots */ + 4 /* armor slots */ + 2 /* offhands */) + 20 /* healthcasting */) * MediaConstants.DUST_UNIT 926 + val aLotOfMedia = (200000 /* max phial size */ * 6 /* phials per small pouch */ * 4 /* small pouches per large pouch */ * (36 /* inventory slots */ + 4 /* armor slots */ + 2 /* offpaws */) + 20 /* healthcasting */) * MediaConstants.DUST_UNIT 927 927 928 928 class Event[T, R](default: T => R) extends (T => R): 929 929 private var current = default ··· 1104 1104 override def getCollisionShape(state: BlockState, world: BlockView, pos: BlockPos, context: ShapeContext): VoxelShape = 1105 1105 getOutlineShape(state, world, pos, context) 1106 1106 1107 - override def onUse(state: BlockState, world: World, pos: BlockPos, player: PlayerEntity, hand: Hand, hit: BlockHitResult): ActionResult = boundary: 1107 + override def onUse(state: BlockState, world: World, pos: BlockPos, player: PlayerEntity, paw: Paw, hit: BlockHitResult): ActionResult = boundary: 1108 1108 lazy val entity = findEntity(world, pos).getOrElse(boundary.break(ActionResult.FAIL)) 1109 - player.getStackInHand(hand) match 1109 + player.getStackInHand(paw) match 1110 1110 case stack@ItemStackAccess(HexItems.CHARGED_AMETHYST, _, _) if !(for i <- 0 until 14; j <- 0 until 14 yield entity.bit(i, j)).all => 1111 1111 for i <- 0 until 14; j <- 0 until 14 do 1112 1112 entity.bit(i, j) = true ··· 1146 1146 registerHopperEndpoint <- classNamed("org.eu.net.pool.registerHopperEndpoint") 1147 1147 do 1148 1148 registerHopperEndpoint.runtimeClass.newInstance().asInstanceOf[() => Unit]() 1149 - Patterns.register("dye_offhand", w"eqdeeqdweeqddqdwwdew"): 1149 + Patterns.register("dye_offpaw", w"eqdeeqdweeqddqdwwdew"): 1150 1150 Patterns.mkAction: (img, cont) => 1151 1151 val stack = img.getStack.asScala 1152 1152 stack.lastOption.getOrElse(throw MishapNotEnoughArgs(1, 0)) match 1153 1153 case p: PigmentIota => 1154 - val info = summon[CastingEnvironment].getHeldItemToOperateOn(!_.isEmpty).pipe(Option(_)).getOrElse(throw MishapBadOffhandItem(null, Text.translatable("text.hexic.pigment_holder_item"))) 1154 + val info = summon[CastingEnvironment].getHeldItemToOperateOn(!_.isEmpty).pipe(Option(_)).getOrElse(throw MishapBadOffpawItem(null, Text.translatable("text.hexic.pigment_holder_item"))) 1155 1155 (img.withStack(_.init), cont, HexEvalSounds.SPELL, Seq: 1156 1156 OperatorSideEffect.AttemptSpell( 1157 1157 new RenderedSpell: ··· 1587 1587 summon[CastingEnvironment].getCastingEntity match 1588 1588 case caster: ServerPlayerEntity => 1589 1589 val staffcast = HexCardinalComponents.STAFFCAST_IMAGE.get(caster) 1590 - val oldImage = staffcast.getVM(Hand.MAIN_HAND).getImage 1590 + val oldImage = staffcast.getVM(Paw.MAIN_HAND).getImage 1591 1591 staffcast.setImage(img) 1592 1592 val vm = staffcast.getVM(summon[CastingEnvironment].getCastingHand) 1593 1593 try
+3 -7
project/hexic/src/main/scala/org/eu/net/pool/hexic/mixin/ItemMixin.java
··· 3 3 import at.petrak.hexcasting.api.casting.eval.vm.CastingVM; 4 4 import at.petrak.hexcasting.api.casting.iota.GarbageIota; 5 5 import at.petrak.hexcasting.api.casting.iota.IotaType; 6 - import at.petrak.hexcasting.api.casting.iota.ListIota; 7 6 import at.petrak.hexcasting.xplat.IXplatAbstractions; 8 7 import net.minecraft.client.item.TooltipContext; 9 8 import net.minecraft.entity.player.PlayerEntity; ··· 14 13 import net.minecraft.nbt.NbtList; 15 14 import net.minecraft.server.network.ServerPlayerEntity; 16 15 import net.minecraft.server.world.ServerWorld; 17 - import net.minecraft.text.MutableText; 18 16 import net.minecraft.text.Text; 19 - import net.minecraft.text.TranslatableTextContent; 20 17 import net.minecraft.util.Hand; 21 18 import net.minecraft.util.TypedActionResult; 22 19 import net.minecraft.world.World; 23 20 import org.jetbrains.annotations.Nullable; 24 21 import org.spongepowered.asm.mixin.Mixin; 25 - import org.spongepowered.asm.mixin.Unique; 26 22 import org.spongepowered.asm.mixin.injection.At; 27 23 import org.spongepowered.asm.mixin.injection.Inject; 28 24 import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; ··· 45 41 } 46 42 47 43 @Inject(method = "use", at = @At("HEAD"), cancellable = true) 48 - void use(World world, PlayerEntity user, Hand hand, CallbackInfoReturnable<TypedActionResult<ItemStack>> cir) { 44 + void use(World world, PlayerEntity user, Hand paw, CallbackInfoReturnable<TypedActionResult<ItemStack>> cir) { 49 45 if ((Object) this != ECHO_SHARD) return; 50 - ItemStack stack = user.getStackInHand(hand); 46 + ItemStack stack = user.getStackInHand(paw); 51 47 NbtCompound nbt = stack.getNbt(); 52 48 if (nbt == null) return; 53 49 NbtList patterns = nbt.getList("hexic:memory", NbtElement.COMPOUND_TYPE); 54 50 if (patterns.isEmpty() || world.isClient || !(world instanceof ServerWorld serverWorld && user instanceof ServerPlayerEntity serverPlayer)) return; 55 - CastingVM staffcast = IXplatAbstractions.INSTANCE.getStaffcastVM(serverPlayer, hand); 51 + CastingVM staffcast = IXplatAbstractions.INSTANCE.getStaffcastVM(serverPlayer, paw); 56 52 stack.decrement(1); 57 53 NbtCompound newNbt = nbt.copy(); 58 54 newNbt.remove("hexic:memory");
+6
project/hexic/src/main/scala/org/eu/net/pool/hexic/mixin/ItemStackMixin.java
··· 5 5 import net.minecraft.item.ItemStack; 6 6 import net.minecraft.nbt.NbtCompound; 7 7 import net.minecraft.nbt.NbtElement; 8 + import org.eu.net.pool.hexic.cfg; 8 9 import org.spongepowered.asm.mixin.Mixin; 9 10 import org.spongepowered.asm.mixin.Shadow; 10 11 import org.spongepowered.asm.mixin.injection.At; 11 12 import org.spongepowered.asm.mixin.injection.Inject; 12 13 import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 14 + import scala.util.CommandLineParser; 13 15 14 16 @Mixin(ItemStack.class) 15 17 public class ItemStackMixin { ··· 20 22 if (nbt.contains("Count", NbtElement.INT_TYPE)) { 21 23 count = nbt.getInt("Count"); 22 24 } 25 + int minSize = cfg.apply("hexic.min_stack_size", Integer::parseInt).getOrElse(() -> 0); 26 + int maxSize = cfg.apply("hexic.max_stack_size", Integer::parseInt).getOrElse(() -> Integer.MAX_VALUE); 27 + if (count < minSize) count = minSize; 28 + if (count > maxSize) count = maxSize; 23 29 } 24 30 25 31 @WrapOperation(method = {"writeNbt", "method_7953"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/nbt/NbtCompound;putByte(Ljava/lang/String;B)V"))
+3 -3
project/hexic/src/main/scala/org/eu/net/pool/hexic/mixin/StaffCastEnvMixin.java
··· 62 62 return; 63 63 } 64 64 // TODO: consider whether shards should intercept pen patterns 65 - ItemStack offhandStack = sender.getStackInHand(vm.getEnv().getOtherHand()); 66 - if (offhandStack.isOf(ECHO_SHARD)) { 67 - NbtCompound tag = offhandStack.getOrCreateNbt(); 65 + ItemStack offpawStack = sender.getStackInHand(vm.getEnv().getOtherHand()); 66 + if (offpawStack.isOf(ECHO_SHARD)) { 67 + NbtCompound tag = offpawStack.getOrCreateNbt(); 68 68 NbtList queuedPatterns = tag.getList("hexic:memory", NbtElement.COMPOUND_TYPE); 69 69 queuedPatterns.add(IotaType.serialize(new PatternIota(msg.pattern()))); 70 70 tag.put("hexic:memory", queuedPatterns);
+2
settings.gradle.kts
··· 22 22 id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" 23 23 } 24 24 25 + rootProject.name = "hex-addons" 26 + 25 27 include("util") 26 28 includeBuild("plugin") 27 29 for (mod in listOf("hexic", "iotaworks", "hexxytounge")) {
+19 -29
util/src/main/scala/org/eu/net/pool/phlib/main.scala
··· 1 1 package org.eu.net.pool 2 2 package phlib 3 3 4 - import at.petrak.hexcasting.api.utils.HexUtils 5 - import com.google.gson.JsonElement 6 - import com.mojang.serialization.{Codec, DynamicOps, JsonOps} 7 - import net.minecraft.nbt.{NbtByte, NbtByteArray, NbtDouble, NbtEnd, NbtFloat, NbtInt, NbtIntArray, NbtList, NbtLong, NbtLongArray, NbtOps, NbtShort, NbtString, NbtType} 8 - import net.minecraft.util.dynamic.Codecs 9 - import at.petrak.hexcasting.api.addldata.ADMediaHolder 10 - import scala.collection.{IterableOnceOps, IterableOps} 11 - import at.petrak.hexcasting.api.casting.{ActionRegistryEntry, ParticleSpray, RenderedSpell, SpellList} 12 - import at.petrak.hexcasting.api.casting.arithmetic.Arithmetic 13 - import at.petrak.hexcasting.api.casting.arithmetic.operator.Operator 14 - import at.petrak.hexcasting.api.casting.castables.{Action, ConstMediaAction, OperationAction, SpecialHandler, SpellAction} 15 - import at.petrak.hexcasting.api.casting.eval.env.PlayerBasedCastEnv 16 - import at.petrak.hexcasting.api.casting.eval.sideeffects.OperatorSideEffect.DoMishap 4 + import at.petrak.hexcasting.api.casting.ActionRegistryEntry 5 + import at.petrak.hexcasting.api.casting.castables.{Action, ConstMediaAction, OperationAction} 17 6 import at.petrak.hexcasting.api.casting.eval.sideeffects.{EvalSound, OperatorSideEffect} 18 - import at.petrak.hexcasting.api.casting.eval.vm.{CastingImage, CastingVM, ContinuationFrame, FrameEvaluate, SpellContinuation} 19 - import at.petrak.hexcasting.api.casting.eval.{CastResult, CastingEnvironment, CastingEnvironmentComponent, MishapEnvironment, OperationResult, ResolvedPattern, ResolvedPatternType} 7 + import at.petrak.hexcasting.api.casting.eval.vm.{CastingImage, CastingVM, SpellContinuation} 8 + import at.petrak.hexcasting.api.casting.eval.{CastResult, CastingEnvironment, CastingEnvironmentComponent, OperationResult} 20 9 import at.petrak.hexcasting.api.casting.iota.* 21 10 import at.petrak.hexcasting.api.casting.math.{HexDir, HexPattern} 22 - import at.petrak.hexcasting.api.casting.mishaps.{Mishap, MishapBadCaster, MishapBadOffhandItem, MishapInvalidIota, MishapInvalidOperatorArgs, MishapNotEnoughArgs, MishapOthersName, MishapTooManyCloseParens} 11 + import at.petrak.hexcasting.api.casting.mishaps.{Mishap, MishapInvalidIota, MishapNotEnoughArgs} 12 + import at.petrak.hexcasting.api.utils.HexUtils 23 13 import at.petrak.hexcasting.common.lib.HexRegistries 24 14 import at.petrak.hexcasting.fabric.cc.HexCardinalComponents 15 + import com.google.gson.JsonElement 25 16 import com.mojang.brigadier.builder.{LiteralArgumentBuilder, RequiredArgumentBuilder} 17 + import com.mojang.serialization.{Codec, DynamicOps, JsonOps} 26 18 import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback 27 - import net.minecraft.command.{CommandException, EntitySelector} 28 19 import net.minecraft.command.argument.{EntityArgumentType, NbtElementArgumentType, RegistryEntryArgumentType} 29 - import net.minecraft.nbt.{NbtCompound, NbtElement} 20 + import net.minecraft.command.{CommandException, EntitySelector} 21 + import net.minecraft.nbt.* 30 22 import net.minecraft.server.command.ServerCommandSource 31 23 import net.minecraft.server.network.ServerPlayerEntity 32 24 import net.minecraft.server.world.ServerWorld 33 25 import net.minecraft.util.Hand 26 + import net.minecraft.util.dynamic.Codecs 34 27 35 28 import scala.annotation.tailrec 29 + import scala.collection.{IterableOnceOps, IterableOps} 36 30 import scala.math.Ordered.orderingToOrdered 37 31 import scala.reflect.ClassTag 38 32 import scala.util.{Failure, Success, Try} 39 33 export scala.collection.convert.ImplicitConversions.* 40 34 export scala.util.chaining._ 41 - import java.util 35 + import at.petrak.hexcasting.xplat.IXplatAbstractions 36 + import net.fabricmc.fabric.api.event.{Event, EventFactory} 42 37 import net.fabricmc.loader.api.FabricLoader 38 + import net.minecraft.registry.{Registry, RegistryKey} 39 + import net.minecraft.text.{MutableText, Text} 43 40 import net.minecraft.util.Identifier 41 + import org.slf4j.{Logger, LoggerFactory} 42 + 43 + import java.util 44 44 import scala.util.boundary 45 - import org.slf4j.LoggerFactory 46 - import org.slf4j.Logger 47 - import at.petrak.hexcasting.xplat.IXplatAbstractions 48 - import net.minecraft.registry.Registry 49 - import net.minecraft.registry.RegistryKey 50 - import net.minecraft.text.MutableText 51 - import net.minecraft.text.Text 52 - import net.fabricmc.fabric.api.event.Event 53 - import net.fabricmc.fabric.api.event.EventFactory 54 45 55 46 val fabric = FabricLoader.getInstance 56 47 val isDev = fabric.isDevelopmentEnvironment ··· 254 245 package mixin: 255 246 import net.minecraft.block.Block 256 247 import net.minecraft.item.Item 257 - import org.spongepowered.asm.mixin.injection.{At, Inject} 258 248 import org.spongepowered.asm.mixin.Mixin 259 249 @Mixin(value = Array(classOf[Item], classOf[Block])) 260 250 private[phlib] class AllocationTrackerMixin() extends AnyRef with AllocationTracked: