diff --git a/src/main/java/org/violetmoon/quark/addons/oddities/block/MagnetBlock.java b/src/main/java/org/violetmoon/quark/addons/oddities/block/MagnetBlock.java index 5becac7ef9..e2ed0baddf 100644 --- a/src/main/java/org/violetmoon/quark/addons/oddities/block/MagnetBlock.java +++ b/src/main/java/org/violetmoon/quark/addons/oddities/block/MagnetBlock.java @@ -36,8 +36,6 @@ import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.DirectionProperty; import net.minecraft.world.level.material.PushReaction; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; public class MagnetBlock extends QuarkBlock implements EntityBlock { @@ -50,7 +48,6 @@ public MagnetBlock(ZetaModule module) { } @Override - @OnlyIn(Dist.CLIENT) public void appendHoverText(@Nonnull ItemStack stack, @Nullable BlockGetter worldIn, @Nonnull List<Component> tooltip, @Nonnull TooltipFlag flagIn) { if (stack.getHoverName().getString().equals("Q")) tooltip.add(Component.literal("haha yes")); diff --git a/src/main/java/org/violetmoon/quark/addons/oddities/block/MatrixEnchantingTableBlock.java b/src/main/java/org/violetmoon/quark/addons/oddities/block/MatrixEnchantingTableBlock.java index 44089d3633..0913f554e0 100644 --- a/src/main/java/org/violetmoon/quark/addons/oddities/block/MatrixEnchantingTableBlock.java +++ b/src/main/java/org/violetmoon/quark/addons/oddities/block/MatrixEnchantingTableBlock.java @@ -38,8 +38,6 @@ 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.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.network.NetworkHooks; public class MatrixEnchantingTableBlock extends EnchantmentTableBlock implements IQuarkBlock { @@ -110,7 +108,6 @@ public InteractionResult use(@Nonnull BlockState state, Level worldIn, @Nonnull } @Override - @OnlyIn(Dist.CLIENT) public void animateTick(@Nonnull BlockState stateIn, @Nonnull Level worldIn, @Nonnull BlockPos pos, @Nonnull RandomSource rand) { boolean enabled = Quark.ZETA.modules.isEnabled(MatrixEnchantingModule.class); boolean showInfluences = enabled && MatrixEnchantingModule.allowInfluencing; diff --git a/src/main/java/org/violetmoon/quark/addons/oddities/block/be/MagnetizedBlockBlockEntity.java b/src/main/java/org/violetmoon/quark/addons/oddities/block/be/MagnetizedBlockBlockEntity.java index e875ddb6f4..ff63989e1e 100644 --- a/src/main/java/org/violetmoon/quark/addons/oddities/block/be/MagnetizedBlockBlockEntity.java +++ b/src/main/java/org/violetmoon/quark/addons/oddities/block/be/MagnetizedBlockBlockEntity.java @@ -20,8 +20,6 @@ import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import javax.annotation.Nonnull; @@ -64,17 +62,14 @@ public float getProgress(float ticks) { return Mth.lerp(ticks, this.lastProgress, this.progress); } - @OnlyIn(Dist.CLIENT) public float getOffsetX(float ticks) { return this.magnetFacing.getStepX() * this.getExtendedProgress(this.getProgress(ticks)); } - @OnlyIn(Dist.CLIENT) public float getOffsetY(float ticks) { return this.magnetFacing.getStepY() * this.getExtendedProgress(this.getProgress(ticks)); } - @OnlyIn(Dist.CLIENT) public float getOffsetZ(float ticks) { return this.magnetFacing.getStepZ() * this.getExtendedProgress(this.getProgress(ticks)); } diff --git a/src/main/java/org/violetmoon/quark/addons/oddities/block/pipe/EncasedPipeBlock.java b/src/main/java/org/violetmoon/quark/addons/oddities/block/pipe/EncasedPipeBlock.java index bf80eeb8c8..fb699e6283 100644 --- a/src/main/java/org/violetmoon/quark/addons/oddities/block/pipe/EncasedPipeBlock.java +++ b/src/main/java/org/violetmoon/quark/addons/oddities/block/pipe/EncasedPipeBlock.java @@ -15,8 +15,6 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; public class EncasedPipeBlock extends BasePipeBlock { @@ -30,7 +28,6 @@ public boolean allowsFullConnection(ConnectionType conn) { } @Override - @OnlyIn(Dist.CLIENT) public boolean skipRendering(@Nonnull BlockState state, BlockState adjacentBlockState, @Nonnull Direction side) { return adjacentBlockState.is(this) || adjacentBlockState.is(Blocks.GLASS) || super.skipRendering(state, adjacentBlockState, side); } @@ -42,7 +39,6 @@ public VoxelShape getVisualShape(@Nonnull BlockState state, @Nonnull BlockGetter } @Override - @OnlyIn(Dist.CLIENT) public float getShadeBrightness(@Nonnull BlockState state, @Nonnull BlockGetter worldIn, @Nonnull BlockPos pos) { return 1.0F; } diff --git a/src/main/java/org/violetmoon/quark/addons/oddities/client/model/BackpackModel.java b/src/main/java/org/violetmoon/quark/addons/oddities/client/model/BackpackModel.java index 4476c24118..3fa2f9da97 100644 --- a/src/main/java/org/violetmoon/quark/addons/oddities/client/model/BackpackModel.java +++ b/src/main/java/org/violetmoon/quark/addons/oddities/client/model/BackpackModel.java @@ -6,10 +6,7 @@ import net.minecraft.client.model.geom.builders.CubeListBuilder; import net.minecraft.client.model.geom.builders.LayerDefinition; import net.minecraft.client.model.geom.builders.PartDefinition; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -@OnlyIn(Dist.CLIENT) public class BackpackModel { public static LayerDefinition createBodyLayer() { diff --git a/src/main/java/org/violetmoon/quark/addons/oddities/client/model/TinyPotatoModel.java b/src/main/java/org/violetmoon/quark/addons/oddities/client/model/TinyPotatoModel.java index 0efe3e0bdb..37ca4c0be3 100644 --- a/src/main/java/org/violetmoon/quark/addons/oddities/client/model/TinyPotatoModel.java +++ b/src/main/java/org/violetmoon/quark/addons/oddities/client/model/TinyPotatoModel.java @@ -19,10 +19,7 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -@OnlyIn(Dist.CLIENT) public record TinyPotatoModel(BakedModel originalModel) implements BakedModel { @Override diff --git a/src/main/java/org/violetmoon/quark/addons/oddities/client/render/be/MagnetizedBlockRenderer.java b/src/main/java/org/violetmoon/quark/addons/oddities/client/render/be/MagnetizedBlockRenderer.java index 7ed7c3a4e1..0b0173c11f 100644 --- a/src/main/java/org/violetmoon/quark/addons/oddities/client/render/be/MagnetizedBlockRenderer.java +++ b/src/main/java/org/violetmoon/quark/addons/oddities/client/render/be/MagnetizedBlockRenderer.java @@ -20,11 +20,8 @@ import net.minecraft.world.level.block.piston.PistonHeadBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.ForgeHooksClient; -@OnlyIn(Dist.CLIENT) public class MagnetizedBlockRenderer implements BlockEntityRenderer<MagnetizedBlockBlockEntity> { private BlockRenderDispatcher blockRenderer = Minecraft.getInstance().getBlockRenderer(); diff --git a/src/main/java/org/violetmoon/quark/addons/oddities/client/render/be/TinyPotatoRenderer.java b/src/main/java/org/violetmoon/quark/addons/oddities/client/render/be/TinyPotatoRenderer.java index 1887e31c99..7e3cdf73e3 100644 --- a/src/main/java/org/violetmoon/quark/addons/oddities/client/render/be/TinyPotatoRenderer.java +++ b/src/main/java/org/violetmoon/quark/addons/oddities/client/render/be/TinyPotatoRenderer.java @@ -24,8 +24,6 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import javax.annotation.Nonnull; @@ -42,7 +40,6 @@ import java.util.Map; import java.util.regex.Pattern; -@OnlyIn(Dist.CLIENT) public class TinyPotatoRenderer implements BlockEntityRenderer<TinyPotatoBlockEntity> { public static final String DEFAULT = "default"; public static final String HALLOWEEN = "halloween"; diff --git a/src/main/java/org/violetmoon/quark/addons/oddities/client/render/entity/TotemOfHoldingRenderer.java b/src/main/java/org/violetmoon/quark/addons/oddities/client/render/entity/TotemOfHoldingRenderer.java index 7a839408db..db73037be8 100644 --- a/src/main/java/org/violetmoon/quark/addons/oddities/client/render/entity/TotemOfHoldingRenderer.java +++ b/src/main/java/org/violetmoon/quark/addons/oddities/client/render/entity/TotemOfHoldingRenderer.java @@ -23,14 +23,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.phys.EntityHitResult; import net.minecraft.world.phys.HitResult; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -/** - * @author WireSegal - * Created at 2:01 PM on 3/30/20. - */ -@OnlyIn(Dist.CLIENT) public class TotemOfHoldingRenderer extends EntityRenderer<TotemOfHoldingEntity> { private static final ModelResourceLocation LOCATION_MODEL = new ModelResourceLocation(Quark.MOD_ID, "extra/totem_of_holding", "inventory"); diff --git a/src/main/java/org/violetmoon/quark/addons/oddities/item/BackpackItem.java b/src/main/java/org/violetmoon/quark/addons/oddities/item/BackpackItem.java index a4a95cc700..c841a864ad 100644 --- a/src/main/java/org/violetmoon/quark/addons/oddities/item/BackpackItem.java +++ b/src/main/java/org/violetmoon/quark/addons/oddities/item/BackpackItem.java @@ -45,8 +45,6 @@ import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.Level; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.common.util.LazyOptional; diff --git a/src/main/java/org/violetmoon/quark/api/event/UsageTickerEvent.java b/src/main/java/org/violetmoon/quark/api/event/UsageTickerEvent.java index 5069823e1f..cab6145f35 100644 --- a/src/main/java/org/violetmoon/quark/api/event/UsageTickerEvent.java +++ b/src/main/java/org/violetmoon/quark/api/event/UsageTickerEvent.java @@ -3,13 +3,10 @@ import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.eventbus.api.Cancelable; import net.minecraftforge.eventbus.api.Event; @Cancelable -@OnlyIn(Dist.CLIENT) public class UsageTickerEvent extends Event { public final EquipmentSlot slot; diff --git a/src/main/java/org/violetmoon/quark/base/block/QuarkGlassBlock.java b/src/main/java/org/violetmoon/quark/base/block/QuarkGlassBlock.java index 5a57dab2a8..a01450e309 100644 --- a/src/main/java/org/violetmoon/quark/base/block/QuarkGlassBlock.java +++ b/src/main/java/org/violetmoon/quark/base/block/QuarkGlassBlock.java @@ -15,8 +15,6 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; /** * @author WireSegal @@ -36,7 +34,6 @@ public QuarkGlassBlock(String regname, ZetaModule module, CreativeModeTab creati } @Override - @OnlyIn(Dist.CLIENT) public boolean skipRendering(@Nonnull BlockState state, BlockState adjacentBlockState, @Nonnull Direction side) { return adjacentBlockState.is(this) || super.skipRendering(state, adjacentBlockState, side); } @@ -48,7 +45,6 @@ public VoxelShape getVisualShape(@Nonnull BlockState state, @Nonnull BlockGetter } @Override - @OnlyIn(Dist.CLIENT) public float getShadeBrightness(@Nonnull BlockState state, @Nonnull BlockGetter worldIn, @Nonnull BlockPos pos) { return 1.0F; } diff --git a/src/main/java/org/violetmoon/quark/base/client/render/QuarkArmorModel.java b/src/main/java/org/violetmoon/quark/base/client/render/QuarkArmorModel.java index 82abc81a75..bae339c2e9 100644 --- a/src/main/java/org/violetmoon/quark/base/client/render/QuarkArmorModel.java +++ b/src/main/java/org/violetmoon/quark/base/client/render/QuarkArmorModel.java @@ -15,12 +15,9 @@ import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.decoration.ArmorStand; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import javax.annotation.Nonnull; -@OnlyIn(Dist.CLIENT) public class QuarkArmorModel extends HumanoidModel<LivingEntity> { protected final EquipmentSlot slot; diff --git a/src/main/java/org/violetmoon/quark/base/config/SyncedFlagHandler.java b/src/main/java/org/violetmoon/quark/base/config/SyncedFlagHandler.java index a9e947e87d..f9cb4f556b 100644 --- a/src/main/java/org/violetmoon/quark/base/config/SyncedFlagHandler.java +++ b/src/main/java/org/violetmoon/quark/base/config/SyncedFlagHandler.java @@ -12,7 +12,6 @@ import org.violetmoon.quark.base.network.QuarkNetwork; import org.violetmoon.quark.base.network.message.structural.S2CUpdateFlag; import org.violetmoon.zeta.event.bus.LoadEvent; -import org.violetmoon.zeta.event.bus.PlayEvent; import org.violetmoon.zeta.event.load.ZConfigChanged; public class SyncedFlagHandler { diff --git a/src/main/java/org/violetmoon/quark/base/item/QuarkMusicDiscItem.java b/src/main/java/org/violetmoon/quark/base/item/QuarkMusicDiscItem.java index cba2be906f..c9099becc1 100644 --- a/src/main/java/org/violetmoon/quark/base/item/QuarkMusicDiscItem.java +++ b/src/main/java/org/violetmoon/quark/base/item/QuarkMusicDiscItem.java @@ -11,8 +11,6 @@ import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; import net.minecraft.world.item.*; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import javax.annotation.Nonnull; @@ -27,8 +25,8 @@ public class QuarkMusicDiscItem extends RecordItem implements IZetaItem { private final ZetaModule module; - private final boolean isAmbient; - private final Supplier<SoundEvent> soundSupplier; + public final boolean isAmbient; + public final Supplier<SoundEvent> soundSupplier; private BooleanSupplier enabledSupplier = () -> true; @@ -63,25 +61,4 @@ public boolean doesConditionApply() { return enabledSupplier.getAsBoolean(); } - @OnlyIn(Dist.CLIENT) - public boolean playAmbientSound(BlockPos pos) { - if(isAmbient) { - Minecraft mc = Minecraft.getInstance(); - SoundManager soundEngine = mc.getSoundManager(); - LevelRenderer render = mc.levelRenderer; - - SimpleSoundInstance simplesound = new SimpleSoundInstance(soundSupplier.get().getLocation(), SoundSource.RECORDS, (float) AmbientDiscsModule.volume, 1.0F, SoundInstance.createUnseededRandom(), true, 0, SoundInstance.Attenuation.LINEAR, pos.getX(), pos.getY(), pos.getZ(), false); - - render.playingRecords.put(pos, simplesound); - soundEngine.play(simplesound); - - if(mc.level != null) - mc.level.addParticle(ParticleTypes.NOTE,pos.getX() + Math.random(), pos.getY() + 1.1, pos.getZ() + Math.random(), Math.random(), 0, 0); - - return true; - } - - return false; - } - } diff --git a/src/main/java/org/violetmoon/quark/base/proxy/ClientProxy.java b/src/main/java/org/violetmoon/quark/base/proxy/ClientProxy.java index bd133cac56..852babcf3d 100644 --- a/src/main/java/org/violetmoon/quark/base/proxy/ClientProxy.java +++ b/src/main/java/org/violetmoon/quark/base/proxy/ClientProxy.java @@ -10,8 +10,6 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.phys.BlockHitResult; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.ConfigScreenHandler.ConfigScreenFactory; import net.minecraftforge.fml.ModLoadingContext; @@ -37,9 +35,7 @@ import org.violetmoon.quark.base.network.message.structural.C2SUpdateFlag; import org.violetmoon.quark.mixin.client.accessor.AccessorMultiPlayerGameMode; import org.violetmoon.zeta.client.TopLayerTooltipHandler; -import org.violetmoon.zeta.registry.RenderLayerRegistry; -@OnlyIn(Dist.CLIENT) public class ClientProxy extends CommonProxy { public static boolean jingleBellsMotherfucker = false; diff --git a/src/main/java/org/violetmoon/quark/base/proxy/CommonProxy.java b/src/main/java/org/violetmoon/quark/base/proxy/CommonProxy.java index 0e8e61d6a0..a44df398d0 100644 --- a/src/main/java/org/violetmoon/quark/base/proxy/CommonProxy.java +++ b/src/main/java/org/violetmoon/quark/base/proxy/CommonProxy.java @@ -123,7 +123,7 @@ public void start() { @LoadEvent public void setup(ZCommonSetup event) { - handleQuarkConfigChange(); + event.enqueueWork(this::handleQuarkConfigChange); } //TODO find a better place for this little one-off thing, lol diff --git a/src/main/java/org/violetmoon/quark/content/automation/block/RedstoneRandomizerBlock.java b/src/main/java/org/violetmoon/quark/content/automation/block/RedstoneRandomizerBlock.java index 7457404238..f307ae90b5 100644 --- a/src/main/java/org/violetmoon/quark/content/automation/block/RedstoneRandomizerBlock.java +++ b/src/main/java/org/violetmoon/quark/content/automation/block/RedstoneRandomizerBlock.java @@ -32,8 +32,6 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.ticks.TickPriority; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.event.ForgeEventFactory; /** @@ -189,7 +187,6 @@ public static void notifyNeighbors(Block block, Level world, BlockPos pos, Block world.updateNeighborsAtExceptFromFacing(neighborPos, block, face); } - @OnlyIn(Dist.CLIENT) @Override public void animateTick(BlockState stateIn, @Nonnull Level worldIn, @Nonnull BlockPos pos, @Nonnull RandomSource rand) { if (stateIn.getValue(POWERED) != RandomizerPowerState.OFF) { diff --git a/src/main/java/org/violetmoon/quark/content/building/client/render/entity/GlassItemFrameRenderer.java b/src/main/java/org/violetmoon/quark/content/building/client/render/entity/GlassItemFrameRenderer.java index 3a8e3ee417..1d48010bcc 100644 --- a/src/main/java/org/violetmoon/quark/content/building/client/render/entity/GlassItemFrameRenderer.java +++ b/src/main/java/org/violetmoon/quark/content/building/client/render/entity/GlassItemFrameRenderer.java @@ -41,14 +41,10 @@ import net.minecraft.world.item.MapItem; import net.minecraft.world.item.ShieldItem; import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.StandingSignBlock; import net.minecraft.world.level.block.entity.BannerBlockEntity; import net.minecraft.world.level.block.entity.BannerPattern; -import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.event.RenderItemInFrameEvent; import net.minecraftforge.common.MinecraftForge; @@ -57,7 +53,6 @@ * Created at 11:58 AM on 8/25/19. */ -@OnlyIn(Dist.CLIENT) public class GlassItemFrameRenderer extends EntityRenderer<GlassItemFrame> { private static final ModelResourceLocation LOCATION_MODEL = new ModelResourceLocation(new ResourceLocation(Quark.MOD_ID, "extra/glass_item_frame"), "inventory"); diff --git a/src/main/java/org/violetmoon/quark/content/building/module/VariantChestsModule.java b/src/main/java/org/violetmoon/quark/content/building/module/VariantChestsModule.java index 6fbb5bd4e3..c30c280fe1 100644 --- a/src/main/java/org/violetmoon/quark/content/building/module/VariantChestsModule.java +++ b/src/main/java/org/violetmoon/quark/content/building/module/VariantChestsModule.java @@ -128,19 +128,6 @@ public void loadComplete(ZLoadComplete e) { ILootrIntegration.INSTANCE.loadComplete(); } - @LoadEvent - public final void clientSetup(ZClientSetup event) { - BlockEntityRenderers.register(chestTEType, VariantChestRenderer::new); - BlockEntityRenderers.register(trappedChestTEType, VariantChestRenderer::new); - - ILootrIntegration.INSTANCE.clientSetup(); - - for(Block b : chests) - QuarkClient.ZETA_CLIENT.setBlockEntityWithoutLevelRenderer(b.asItem(), new SimpleWithoutLevelRenderer(chestTEType, b.defaultBlockState())); - for(Block b : trappedChests) - QuarkClient.ZETA_CLIENT.setBlockEntityWithoutLevelRenderer(b.asItem(), new SimpleWithoutLevelRenderer(trappedChestTEType, b.defaultBlockState())); - } - @LoadEvent public final void configChanged(ZConfigChanged event) { staticEnabled = enabled; @@ -252,15 +239,6 @@ public static <T extends BlockEntity> BlockEntityType<T> registerChests(BlockEnt return BlockEntityType.Builder.<T>of(factory, blockTypes.toArray(new Block[0])).build(null); } - @LoadEvent - public void textureStitch(ZPreTextureStitch event) { - if (event.getAtlas().location().toString().equals("minecraft:textures/atlas/chest.png")) { - for (Block b : allChests) - VariantChestRenderer.accept(event, b); - ILootrIntegration.INSTANCE.stitch(event); - } - } - @PlayEvent public void onClickEntity(ZPlayerInteract.EntityInteractSpecific event) { Entity target = event.getTarget(); @@ -336,4 +314,31 @@ public interface ChestConstructor { public interface CompatChestConstructor { Block createChest(String type, String mod, ZetaModule module, Supplier<BlockEntityType<? extends ChestBlockEntity>> supplier, BlockBehaviour.Properties props); } + + @ZetaLoadModule(clientReplacement = true) + public static class Client extends VariantChestsModule { + + @LoadEvent + public final void clientSetup(ZClientSetup event) { + BlockEntityRenderers.register(chestTEType, VariantChestRenderer::new); + BlockEntityRenderers.register(trappedChestTEType, VariantChestRenderer::new); + + ILootrIntegration.INSTANCE.clientSetup(); + + for(Block b : chests) + QuarkClient.ZETA_CLIENT.setBlockEntityWithoutLevelRenderer(b.asItem(), new SimpleWithoutLevelRenderer(chestTEType, b.defaultBlockState())); + for(Block b : trappedChests) + QuarkClient.ZETA_CLIENT.setBlockEntityWithoutLevelRenderer(b.asItem(), new SimpleWithoutLevelRenderer(trappedChestTEType, b.defaultBlockState())); + } + + @LoadEvent + public void textureStitch(ZPreTextureStitch event) { + if (event.getAtlas().location().toString().equals("minecraft:textures/atlas/chest.png")) { + for (Block b : allChests) + VariantChestRenderer.accept(event, b); + ILootrIntegration.INSTANCE.stitch(event); + } + } + + } } diff --git a/src/main/java/org/violetmoon/quark/content/building/recipe/MixedExclusionRecipe.java b/src/main/java/org/violetmoon/quark/content/building/recipe/MixedExclusionRecipe.java index a1a07a583c..e3a12292fe 100644 --- a/src/main/java/org/violetmoon/quark/content/building/recipe/MixedExclusionRecipe.java +++ b/src/main/java/org/violetmoon/quark/content/building/recipe/MixedExclusionRecipe.java @@ -21,7 +21,7 @@ public class MixedExclusionRecipe implements CraftingRecipe, IShapedRecipe<CraftingContainer> { - public static final Serializer SERIALIZER = new Serializer(); + public static final RecipeSerializer<MixedExclusionRecipe> SERIALIZER = new Serializer(); private final ResourceLocation res; private NonNullList<Ingredient> ingredients; diff --git a/src/main/java/org/violetmoon/quark/content/experimental/client/tooltip/VariantsComponent.java b/src/main/java/org/violetmoon/quark/content/experimental/client/tooltip/VariantsComponent.java index 117416802a..bb476ddf81 100644 --- a/src/main/java/org/violetmoon/quark/content/experimental/client/tooltip/VariantsComponent.java +++ b/src/main/java/org/violetmoon/quark/content/experimental/client/tooltip/VariantsComponent.java @@ -16,10 +16,7 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -@OnlyIn(Dist.CLIENT) public class VariantsComponent implements ClientTooltipComponent, TooltipComponent { final ItemStack stack; diff --git a/src/main/java/org/violetmoon/quark/content/experimental/module/VariantSelectorModule.java b/src/main/java/org/violetmoon/quark/content/experimental/module/VariantSelectorModule.java index 1dd40a40c8..182759bccc 100644 --- a/src/main/java/org/violetmoon/quark/content/experimental/module/VariantSelectorModule.java +++ b/src/main/java/org/violetmoon/quark/content/experimental/module/VariantSelectorModule.java @@ -28,8 +28,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import org.lwjgl.glfw.GLFW; import org.lwjgl.opengl.GL11; import org.violetmoon.quark.base.Quark; @@ -56,7 +54,6 @@ import org.violetmoon.zeta.module.ZetaLoadModule; import org.violetmoon.zeta.module.ZetaModule; -import java.util.Arrays; import java.util.List; @ZetaLoadModule(category = "experimental", enabledByDefault = false, @@ -142,23 +139,6 @@ public static Block getVariantOrOriginal(Block block, String variant) { return getVariantForBlock(block, variant); } - public static ItemStack modifyHeldItemStack(AbstractClientPlayer player, ItemStack stack) { - if(!staticEnabled || !overrideHeldItemRender) - return stack; - - Minecraft mc = Minecraft.getInstance(); - if(player == mc.player && stack.getItem() instanceof BlockItem bi) { - Block block = bi.getBlock(); - if(clientVariant != null && !clientVariant.isEmpty()) { - Block variant = variants.getBlockForVariant(block, clientVariant); - if(variant != null && variant != block) - return new ItemStack(variant); - } - } - - return stack; - } - @PlayEvent public void addEntityToWorld(ZEntityJoinLevel event) { Entity entity = event.getEntity(); @@ -196,9 +176,25 @@ public static BlockState modifyBlockPlacementState(BlockState state, BlockPlaceC @ZetaLoadModule(clientReplacement = true) public static class Client extends VariantSelectorModule { - @OnlyIn(Dist.CLIENT) private static KeyMapping variantSelectorKey; + public static ItemStack modifyHeldItemStack(AbstractClientPlayer player, ItemStack stack) { + if(!staticEnabled || !overrideHeldItemRender) + return stack; + + Minecraft mc = Minecraft.getInstance(); + if(player == mc.player && stack.getItem() instanceof BlockItem bi) { + Block block = bi.getBlock(); + if(clientVariant != null && !clientVariant.isEmpty()) { + Block variant = variants.getBlockForVariant(block, clientVariant); + if(variant != null && variant != block) + return new ItemStack(variant); + } + } + + return stack; + } + @LoadEvent public void registerKeybinds(ZKeyMapping event) { variantSelectorKey = event.init("quark.keybind.variant_selector", "r", QuarkClient.MISC_GROUP); diff --git a/src/main/java/org/violetmoon/quark/content/mobs/client/layer/StonelingItemLayer.java b/src/main/java/org/violetmoon/quark/content/mobs/client/layer/StonelingItemLayer.java index d0cc49d7ec..a12560ed94 100755 --- a/src/main/java/org/violetmoon/quark/content/mobs/client/layer/StonelingItemLayer.java +++ b/src/main/java/org/violetmoon/quark/content/mobs/client/layer/StonelingItemLayer.java @@ -21,15 +21,12 @@ import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import javax.annotation.Nonnull; import org.violetmoon.quark.content.mobs.client.model.StonelingModel; import org.violetmoon.quark.content.mobs.entity.Stoneling; -@OnlyIn(Dist.CLIENT) public class StonelingItemLayer extends RenderLayer<Stoneling, StonelingModel> { public StonelingItemLayer(RenderLayerParent<Stoneling, StonelingModel> renderer) { diff --git a/src/main/java/org/violetmoon/quark/content/mobs/client/layer/forgotten/ForgottenClothingLayer.java b/src/main/java/org/violetmoon/quark/content/mobs/client/layer/forgotten/ForgottenClothingLayer.java index c22f395183..e2c00daa20 100644 --- a/src/main/java/org/violetmoon/quark/content/mobs/client/layer/forgotten/ForgottenClothingLayer.java +++ b/src/main/java/org/violetmoon/quark/content/mobs/client/layer/forgotten/ForgottenClothingLayer.java @@ -12,14 +12,11 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.monster.RangedAttackMob; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import javax.annotation.Nonnull; import org.violetmoon.quark.base.Quark; -@OnlyIn(Dist.CLIENT) public class ForgottenClothingLayer<T extends Mob & RangedAttackMob, M extends EntityModel<T>> extends RenderLayer<T, M> { private static final ResourceLocation TEXTURE = new ResourceLocation(Quark.MOD_ID, "textures/model/entity/forgotten/overlay.png"); diff --git a/src/main/java/org/violetmoon/quark/content/mobs/client/layer/forgotten/ForgottenEyesLayer.java b/src/main/java/org/violetmoon/quark/content/mobs/client/layer/forgotten/ForgottenEyesLayer.java index 06bb07bb76..397b913de4 100644 --- a/src/main/java/org/violetmoon/quark/content/mobs/client/layer/forgotten/ForgottenEyesLayer.java +++ b/src/main/java/org/violetmoon/quark/content/mobs/client/layer/forgotten/ForgottenEyesLayer.java @@ -6,14 +6,11 @@ import net.minecraft.client.renderer.entity.layers.EyesLayer; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.monster.Skeleton; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import javax.annotation.Nonnull; import org.violetmoon.quark.base.Quark; -@OnlyIn(Dist.CLIENT) public class ForgottenEyesLayer<T extends Skeleton, M extends SkeletonModel<T>> extends EyesLayer<T, M> { private static final ResourceLocation TEXTURE = new ResourceLocation(Quark.MOD_ID, "textures/model/entity/forgotten/eye.png"); diff --git a/src/main/java/org/violetmoon/quark/content/mobs/client/layer/forgotten/ForgottenSheathedItemLayer.java b/src/main/java/org/violetmoon/quark/content/mobs/client/layer/forgotten/ForgottenSheathedItemLayer.java index b572a5824f..ae523e00b2 100644 --- a/src/main/java/org/violetmoon/quark/content/mobs/client/layer/forgotten/ForgottenSheathedItemLayer.java +++ b/src/main/java/org/violetmoon/quark/content/mobs/client/layer/forgotten/ForgottenSheathedItemLayer.java @@ -14,10 +14,7 @@ import net.minecraft.client.renderer.entity.RenderLayerParent; import net.minecraft.client.renderer.entity.layers.RenderLayer; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -@OnlyIn(Dist.CLIENT) public class ForgottenSheathedItemLayer<M extends EntityModel<Forgotten>> extends RenderLayer<Forgotten, M> { private final ItemInHandRenderer itemInHandRenderer; diff --git a/src/main/java/org/violetmoon/quark/content/mobs/client/model/ForgottenHatModel.java b/src/main/java/org/violetmoon/quark/content/mobs/client/model/ForgottenHatModel.java index 8cf064e9e7..6867ffb0d6 100644 --- a/src/main/java/org/violetmoon/quark/content/mobs/client/model/ForgottenHatModel.java +++ b/src/main/java/org/violetmoon/quark/content/mobs/client/model/ForgottenHatModel.java @@ -7,10 +7,7 @@ import net.minecraft.client.model.geom.builders.CubeListBuilder; import net.minecraft.client.model.geom.builders.LayerDefinition; import net.minecraft.client.model.geom.builders.PartDefinition; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -@OnlyIn(Dist.CLIENT) public class ForgottenHatModel { public static LayerDefinition createBodyLayer() { diff --git a/src/main/java/org/violetmoon/quark/content/mobs/client/render/entity/StonelingRenderer.java b/src/main/java/org/violetmoon/quark/content/mobs/client/render/entity/StonelingRenderer.java index 230af12458..87c9de0399 100755 --- a/src/main/java/org/violetmoon/quark/content/mobs/client/render/entity/StonelingRenderer.java +++ b/src/main/java/org/violetmoon/quark/content/mobs/client/render/entity/StonelingRenderer.java @@ -11,10 +11,7 @@ import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.entity.MobRenderer; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -@OnlyIn(Dist.CLIENT) public class StonelingRenderer extends MobRenderer<Stoneling, StonelingModel> { public StonelingRenderer(EntityRendererProvider.Context context) { diff --git a/src/main/java/org/violetmoon/quark/content/mobs/item/DiamondHeartItem.java b/src/main/java/org/violetmoon/quark/content/mobs/item/DiamondHeartItem.java index a6cabd5e32..598c5522f7 100755 --- a/src/main/java/org/violetmoon/quark/content/mobs/item/DiamondHeartItem.java +++ b/src/main/java/org/violetmoon/quark/content/mobs/item/DiamondHeartItem.java @@ -17,8 +17,6 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.LevelEvent; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import javax.annotation.Nonnull; @@ -91,7 +89,6 @@ public Rarity getRarity(@Nonnull ItemStack stack) { } @Override - @OnlyIn(Dist.CLIENT) public boolean isFoil(@Nonnull ItemStack stack) { return true; } diff --git a/src/main/java/org/violetmoon/quark/content/mobs/item/ForgottenHatItem.java b/src/main/java/org/violetmoon/quark/content/mobs/item/ForgottenHatItem.java index f4ebd77d10..bf479bd3d3 100644 --- a/src/main/java/org/violetmoon/quark/content/mobs/item/ForgottenHatItem.java +++ b/src/main/java/org/violetmoon/quark/content/mobs/item/ForgottenHatItem.java @@ -3,31 +3,24 @@ import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.ImmutableMultimap.Builder; import com.google.common.collect.Multimap; -import net.minecraft.client.model.HumanoidModel; import net.minecraft.core.NonNullList; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.*; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.client.extensions.common.IClientItemExtensions; import net.minecraftforge.common.ForgeMod; import javax.annotation.Nonnull; import org.violetmoon.quark.base.Quark; -import org.violetmoon.quark.base.client.handler.ModelHandler; import org.violetmoon.zeta.item.IZetaItem; import org.violetmoon.zeta.item.ZetaArmorItem; import org.violetmoon.zeta.module.ZetaModule; import java.util.UUID; import java.util.function.BooleanSupplier; -import java.util.function.Consumer; public class ForgottenHatItem extends ZetaArmorItem implements IZetaItem { diff --git a/src/main/java/org/violetmoon/quark/content/tools/client/render/GlintRenderTypes.java b/src/main/java/org/violetmoon/quark/content/tools/client/render/GlintRenderTypes.java index e555ebe23e..8627dff30c 100644 --- a/src/main/java/org/violetmoon/quark/content/tools/client/render/GlintRenderTypes.java +++ b/src/main/java/org/violetmoon/quark/content/tools/client/render/GlintRenderTypes.java @@ -8,8 +8,6 @@ import net.minecraft.client.renderer.RenderType; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.DyeColor; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import java.util.ArrayList; import java.util.List; @@ -18,7 +16,6 @@ import org.violetmoon.quark.base.Quark; import org.violetmoon.quark.content.tools.module.ColorRunesModule; -@OnlyIn(Dist.CLIENT) public class GlintRenderTypes extends RenderType { private GlintRenderTypes(String name, VertexFormat vf, VertexFormat.Mode mode, int bufSize, boolean affectsCrumbling, boolean sortOnUpload, Runnable setup, Runnable clean) { super(name, vf, mode, bufSize, affectsCrumbling, sortOnUpload, setup, clean); diff --git a/src/main/java/org/violetmoon/quark/content/tools/client/tooltip/SeedPouchClientTooltipComponent.java b/src/main/java/org/violetmoon/quark/content/tools/client/tooltip/SeedPouchClientTooltipComponent.java index e541e6030c..72e764a1de 100644 --- a/src/main/java/org/violetmoon/quark/content/tools/client/tooltip/SeedPouchClientTooltipComponent.java +++ b/src/main/java/org/violetmoon/quark/content/tools/client/tooltip/SeedPouchClientTooltipComponent.java @@ -1,7 +1,5 @@ package org.violetmoon.quark.content.tools.client.tooltip; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import org.apache.commons.lang3.tuple.Pair; import org.violetmoon.quark.content.tools.item.SeedPouchItem; @@ -15,7 +13,6 @@ import javax.annotation.Nonnull; -@OnlyIn(Dist.CLIENT) public class SeedPouchClientTooltipComponent implements ClientTooltipComponent { private final ItemStack stack; diff --git a/src/main/java/org/violetmoon/quark/content/tools/entity/ParrotEgg.java b/src/main/java/org/violetmoon/quark/content/tools/entity/ParrotEgg.java index eadf6e20f9..a738d590dd 100644 --- a/src/main/java/org/violetmoon/quark/content/tools/entity/ParrotEgg.java +++ b/src/main/java/org/violetmoon/quark/content/tools/entity/ParrotEgg.java @@ -16,8 +16,6 @@ import net.minecraft.world.phys.EntityHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import javax.annotation.Nonnull; @@ -63,7 +61,6 @@ protected Item getDefaultItem() { } @Override - @OnlyIn(Dist.CLIENT) public void handleEntityEvent(byte id) { if(id == EVENT_BREAK) { Vec3 pos = position(); diff --git a/src/main/java/org/violetmoon/quark/content/tools/entity/rang/AbstractPickarang.java b/src/main/java/org/violetmoon/quark/content/tools/entity/rang/AbstractPickarang.java index 7516b20489..5c876f464f 100755 --- a/src/main/java/org/violetmoon/quark/content/tools/entity/rang/AbstractPickarang.java +++ b/src/main/java/org/violetmoon/quark/content/tools/entity/rang/AbstractPickarang.java @@ -42,8 +42,6 @@ import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.HitResult.Type; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.ForgeMod; import net.minecraftforge.event.ForgeEventFactory; @@ -92,7 +90,6 @@ public AbstractPickarang(EntityType<? extends AbstractPickarang<?>> type, Level } @Override - @OnlyIn(Dist.CLIENT) public boolean shouldRenderAtSqrDistance(double distance) { double d0 = this.getBoundingBox().getSize() * 4.0D; if (Double.isNaN(d0)) d0 = 4.0D; @@ -123,7 +120,6 @@ public void shoot(double x, double y, double z, float velocity, float inaccuracy } @Override - @OnlyIn(Dist.CLIENT) public void lerpMotion(double x, double y, double z) { this.setDeltaMovement(x, y, z); if (this.xRotO == 0.0F && this.yRotO == 0.0F) { diff --git a/src/main/java/org/violetmoon/quark/content/tools/item/AncientTomeItem.java b/src/main/java/org/violetmoon/quark/content/tools/item/AncientTomeItem.java index c03ee448e7..d3d6c3db68 100644 --- a/src/main/java/org/violetmoon/quark/content/tools/item/AncientTomeItem.java +++ b/src/main/java/org/violetmoon/quark/content/tools/item/AncientTomeItem.java @@ -8,8 +8,6 @@ import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.item.enchantment.EnchantmentInstance; import net.minecraft.world.level.Level; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import javax.annotation.Nonnull; @@ -70,7 +68,6 @@ public static Component getFullTooltipText(Enchantment ench) { } @Override - @OnlyIn(Dist.CLIENT) public void appendHoverText(@Nonnull ItemStack stack, Level worldIn, @Nonnull List<Component> tooltip, @Nonnull TooltipFlag flagIn) { super.appendHoverText(stack, worldIn, tooltip, flagIn); diff --git a/src/main/java/org/violetmoon/quark/content/tools/item/SeedPouchItem.java b/src/main/java/org/violetmoon/quark/content/tools/item/SeedPouchItem.java index 514ec1f4b6..ba6c337cdc 100644 --- a/src/main/java/org/violetmoon/quark/content/tools/item/SeedPouchItem.java +++ b/src/main/java/org/violetmoon/quark/content/tools/item/SeedPouchItem.java @@ -22,8 +22,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.phys.BlockHitResult; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import org.apache.commons.lang3.tuple.Pair; import org.violetmoon.quark.api.ITrowelable; import org.violetmoon.quark.api.IUsageTickerOverride; @@ -155,7 +153,6 @@ public int getBarColor(@Nonnull ItemStack stack) { return BAR_COLOR; } - @OnlyIn(Dist.CLIENT) public static float itemFraction(ItemStack stack, ClientLevel world, LivingEntity entityIn, int i) { if(entityIn instanceof Player player) { if(player.containerMenu != null) { diff --git a/src/main/java/org/violetmoon/quark/content/tools/module/AmbientDiscsModule.java b/src/main/java/org/violetmoon/quark/content/tools/module/AmbientDiscsModule.java index e1cf344293..87e454211a 100644 --- a/src/main/java/org/violetmoon/quark/content/tools/module/AmbientDiscsModule.java +++ b/src/main/java/org/violetmoon/quark/content/tools/module/AmbientDiscsModule.java @@ -3,6 +3,9 @@ import java.util.ArrayList; import java.util.List; +import net.minecraft.client.resources.sounds.SimpleSoundInstance; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.sounds.SoundSource; import org.violetmoon.quark.base.config.Config; import org.violetmoon.quark.base.handler.QuarkSounds; import org.violetmoon.quark.base.item.QuarkMusicDiscItem; @@ -60,7 +63,9 @@ public void onMobDeath(ZLivingDeath event) { } } - public static class Client { + @ZetaLoadModule(clientReplacement = true) + public static class Client extends AmbientDiscsModule { + public static void onJukeboxLoad(JukeboxBlockEntity tile) { Minecraft mc = Minecraft.getInstance(); LevelRenderer render = mc.levelRenderer; @@ -74,9 +79,30 @@ public static void onJukeboxLoad(JukeboxBlockEntity tile) { } else { ItemStack stack = tile.getRecord(); if(stack.getItem() instanceof QuarkMusicDiscItem disc) - disc.playAmbientSound(pos); + playAmbientSound(disc, pos); } } } + + public static boolean playAmbientSound(QuarkMusicDiscItem disc, BlockPos pos) { + if(disc.isAmbient) { + Minecraft mc = Minecraft.getInstance(); + SoundManager soundEngine = mc.getSoundManager(); + LevelRenderer render = mc.levelRenderer; + + SimpleSoundInstance simplesound = new SimpleSoundInstance(disc.soundSupplier.get().getLocation(), SoundSource.RECORDS, (float) AmbientDiscsModule.volume, 1.0F, SoundInstance.createUnseededRandom(), true, 0, SoundInstance.Attenuation.LINEAR, pos.getX(), pos.getY(), pos.getZ(), false); + + render.playingRecords.put(pos, simplesound); + soundEngine.play(simplesound); + + if(mc.level != null) + mc.level.addParticle(ParticleTypes.NOTE,pos.getX() + Math.random(), pos.getY() + 1.1, pos.getZ() + Math.random(), Math.random(), 0, 0); + + return true; + } + + return false; + } + } } diff --git a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/CustomEmote.java b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/CustomEmote.java index 50d449d49e..a72337c9e9 100644 --- a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/CustomEmote.java +++ b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/CustomEmote.java @@ -4,10 +4,7 @@ import net.minecraft.client.model.HumanoidModel; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -@OnlyIn(Dist.CLIENT) public class CustomEmote extends TemplateSourcedEmote { public CustomEmote(EmoteDescriptor desc, Player player, HumanoidModel<?> model, HumanoidModel<?> armorModel, HumanoidModel<?> armorLegsModel) { diff --git a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/CustomEmoteDescriptor.java b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/CustomEmoteDescriptor.java index 3c852d79ba..9c4b38a83f 100644 --- a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/CustomEmoteDescriptor.java +++ b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/CustomEmoteDescriptor.java @@ -4,10 +4,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.PackType; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -@OnlyIn(Dist.CLIENT) public class CustomEmoteDescriptor extends EmoteDescriptor { public CustomEmoteDescriptor(String name, String regName, int index) { diff --git a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/CustomEmoteIconResourcePack.java b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/CustomEmoteIconResourcePack.java index 381ee82ef4..1a274d5cf1 100644 --- a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/CustomEmoteIconResourcePack.java +++ b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/CustomEmoteIconResourcePack.java @@ -23,10 +23,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.AbstractPackResources; import net.minecraft.server.packs.PackType; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -@OnlyIn(Dist.CLIENT) public class CustomEmoteIconResourcePack extends AbstractPackResources { private final List<String> verifiedNames = new ArrayList<>(); @@ -125,7 +122,4 @@ public String getName() { return "quark-emote-pack"; } - - - } diff --git a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/CustomEmoteTemplate.java b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/CustomEmoteTemplate.java index 8be21f21c5..999b0216ed 100644 --- a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/CustomEmoteTemplate.java +++ b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/CustomEmoteTemplate.java @@ -7,10 +7,6 @@ import org.violetmoon.quark.content.tweaks.module.EmotesModule; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -@OnlyIn(Dist.CLIENT) public class CustomEmoteTemplate extends EmoteTemplate { private String name; diff --git a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/EmoteBase.java b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/EmoteBase.java index 5d8958e8ae..feaf56ef78 100644 --- a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/EmoteBase.java +++ b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/EmoteBase.java @@ -16,10 +16,7 @@ import aurelienribon.tweenengine.TweenManager; import net.minecraft.client.model.HumanoidModel; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -@OnlyIn(Dist.CLIENT) public abstract class EmoteBase { public static final float PI_F = (float) Math.PI; diff --git a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/EmoteDescriptor.java b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/EmoteDescriptor.java index f75a64d940..7dada05822 100644 --- a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/EmoteDescriptor.java +++ b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/EmoteDescriptor.java @@ -4,10 +4,7 @@ import net.minecraft.client.resources.language.I18n; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -@OnlyIn(Dist.CLIENT) public class EmoteDescriptor { public static final ResourceLocation TIER_1 = new ResourceLocation("quark", "textures/emote/patreon_t1.png"); @@ -46,8 +43,7 @@ public void updateTier(EmoteTemplate template) { public String getTranslationKey() { return "quark.emote." + name; } - - @OnlyIn(Dist.CLIENT) + public String getLocalizedName() { return I18n.get(getTranslationKey()); } diff --git a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/EmoteSound.java b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/EmoteSound.java index b7d596f6da..fb13636e18 100644 --- a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/EmoteSound.java +++ b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/EmoteSound.java @@ -21,10 +21,7 @@ import net.minecraft.sounds.SoundSource; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -@OnlyIn(Dist.CLIENT) public class EmoteSound extends AbstractSoundInstance implements TickableSoundInstance { protected boolean donePlaying; diff --git a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/EmoteState.java b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/EmoteState.java index 9886ea2667..5cda33cf81 100644 --- a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/EmoteState.java +++ b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/EmoteState.java @@ -15,10 +15,7 @@ import net.minecraft.client.model.HumanoidModel; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -@OnlyIn(Dist.CLIENT) public class EmoteState { private float[] states = new float[0]; diff --git a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/EmoteTemplate.java b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/EmoteTemplate.java index 170bcca880..41a741316d 100644 --- a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/EmoteTemplate.java +++ b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/EmoteTemplate.java @@ -6,8 +6,6 @@ import net.minecraft.client.model.HumanoidModel; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import java.io.BufferedReader; import java.io.FileNotFoundException; @@ -19,7 +17,6 @@ import org.violetmoon.quark.base.Quark; -@OnlyIn(Dist.CLIENT) public class EmoteTemplate { private static final Map<String, Integer> parts = new HashMap<>(); diff --git a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/ModelAccessor.java b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/ModelAccessor.java index 064bdce56b..776a998f2f 100644 --- a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/ModelAccessor.java +++ b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/ModelAccessor.java @@ -13,15 +13,12 @@ import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.PlayerModel; import net.minecraft.client.model.geom.ModelPart; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import java.util.Map; import java.util.WeakHashMap; import aurelienribon.tweenengine.TweenAccessor; -@OnlyIn(Dist.CLIENT) public class ModelAccessor implements TweenAccessor<HumanoidModel<?>> { public static final ModelAccessor INSTANCE = new ModelAccessor(); diff --git a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/TemplateSourcedEmote.java b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/TemplateSourcedEmote.java index 7ce7845909..793b4cbc1c 100644 --- a/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/TemplateSourcedEmote.java +++ b/src/main/java/org/violetmoon/quark/content/tweaks/client/emote/TemplateSourcedEmote.java @@ -7,10 +7,7 @@ import cpw.mods.modlauncher.api.IEnvironment; import net.minecraft.client.model.HumanoidModel; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -@OnlyIn(Dist.CLIENT) public class TemplateSourcedEmote extends EmoteBase { private static final boolean DEOBF = Launcher.INSTANCE.environment().getProperty(IEnvironment.Keys.NAMING.get()).orElse("").equals("mcp"); diff --git a/src/main/java/org/violetmoon/quark/content/tweaks/client/item/ClockTimeGetter.java b/src/main/java/org/violetmoon/quark/content/tweaks/client/item/ClockTimeGetter.java deleted file mode 100644 index e43a7f9fc0..0000000000 --- a/src/main/java/org/violetmoon/quark/content/tweaks/client/item/ClockTimeGetter.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.violetmoon.quark.content.tweaks.client.item; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import org.violetmoon.zeta.util.ItemNBTHelper; - -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.renderer.item.ItemPropertyFunction; -import net.minecraft.util.Mth; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -public class ClockTimeGetter { - - private static final String TAG_CALCULATED = "quark:clock_calculated"; - - public static void tickClock(ItemStack stack) { - boolean calculated = isCalculated(stack); - if(!calculated) - ItemNBTHelper.setBoolean(stack, TAG_CALCULATED, true); - } - - static boolean isCalculated(ItemStack stack) { - return stack.hasTag() && ItemNBTHelper.getBoolean(stack, TAG_CALCULATED, false); - } - - @OnlyIn(Dist.CLIENT) - public static class Impl implements ItemPropertyFunction { - - private double rotation; - private double rota; - private long lastUpdateTick; - - @Override - @OnlyIn(Dist.CLIENT) - public float call(@Nonnull ItemStack stack, @Nullable ClientLevel worldIn, @Nullable LivingEntity entityIn, int id) { - if(!isCalculated(stack)) - return 0F; - - boolean carried = entityIn != null; - Entity entity = carried ? entityIn : stack.getFrame(); - - if(worldIn == null && entity != null && entity.level instanceof ClientLevel) - worldIn = (ClientLevel) entity.level; - - if(worldIn == null) - return 0F; - else { - double angle; - - if (worldIn.dimensionType().natural()) - angle = worldIn.getTimeOfDay(1F); // getCelestrialAngleByTime - else - angle = Math.random(); - - angle = wobble(worldIn, angle); - return (float) angle; - } - } - - private double wobble(Level world, double time) { - long gameTime = world.getGameTime(); - if(gameTime != lastUpdateTick) { - lastUpdateTick = gameTime; - double d0 = time - rotation; - d0 = Mth.positiveModulo(d0 + 0.5D, 1.0D) - 0.5D; - rota += d0 * 0.1D; - rota *= 0.9D; - rotation = Mth.positiveModulo(rotation + rota, 1.0D); - } - - return rotation; - } - - } - -} diff --git a/src/main/java/org/violetmoon/quark/content/tweaks/client/item/ClockTimePropertyFunction.java b/src/main/java/org/violetmoon/quark/content/tweaks/client/item/ClockTimePropertyFunction.java new file mode 100644 index 0000000000..8b65669afa --- /dev/null +++ b/src/main/java/org/violetmoon/quark/content/tweaks/client/item/ClockTimePropertyFunction.java @@ -0,0 +1,65 @@ +package org.violetmoon.quark.content.tweaks.client.item; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.item.ItemPropertyFunction; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import org.violetmoon.quark.content.tweaks.module.CompassesWorkEverywhereModule; + +@OnlyIn(Dist.CLIENT) +public class ClockTimePropertyFunction implements ItemPropertyFunction { + + private double rotation; + private double rota; + private long lastUpdateTick; + + @Override + @OnlyIn(Dist.CLIENT) + public float call(@Nonnull ItemStack stack, @Nullable ClientLevel worldIn, @Nullable LivingEntity entityIn, int id) { + if(!CompassesWorkEverywhereModule.isClockCalculated(stack)) + return 0F; + + boolean carried = entityIn != null; + Entity entity = carried ? entityIn : stack.getFrame(); + + if(worldIn == null && entity != null && entity.level instanceof ClientLevel) + worldIn = (ClientLevel) entity.level; + + if(worldIn == null) + return 0F; + else { + double angle; + + if(worldIn.dimensionType().natural()) + angle = worldIn.getTimeOfDay(1F); // getCelestrialAngleByTime + else + angle = Math.random(); + + angle = wobble(worldIn, angle); + return (float) angle; + } + } + + private double wobble(Level world, double time) { + long gameTime = world.getGameTime(); + if(gameTime != lastUpdateTick) { + lastUpdateTick = gameTime; + double d0 = time - rotation; + d0 = Mth.positiveModulo(d0 + 0.5D, 1.0D) - 0.5D; + rota += d0 * 0.1D; + rota *= 0.9D; + rotation = Mth.positiveModulo(rotation + rota, 1.0D); + } + + return rotation; + } + +} diff --git a/src/main/java/org/violetmoon/quark/content/tweaks/client/item/CompassAngleGetter.java b/src/main/java/org/violetmoon/quark/content/tweaks/client/item/CompassAngleGetter.java deleted file mode 100644 index e876a9c562..0000000000 --- a/src/main/java/org/violetmoon/quark/content/tweaks/client/item/CompassAngleGetter.java +++ /dev/null @@ -1,203 +0,0 @@ -package org.violetmoon.quark.content.tweaks.client.item; - -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.renderer.item.ItemPropertyFunction; -import net.minecraft.core.BlockPos; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtUtils; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.Mth; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.decoration.ItemFrame; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.CompassItem; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.dimension.LevelStem; -import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import org.violetmoon.quark.content.tweaks.module.CompassesWorkEverywhereModule; -import org.violetmoon.zeta.util.ItemNBTHelper; - -import java.util.Optional; - -public class CompassAngleGetter { - - private static final String TAG_CALCULATED = "quark:compass_calculated"; - private static final String TAG_WAS_IN_NETHER = "quark:compass_in_nether"; - private static final String TAG_POSITION_SET = "quark:compass_position_set"; - private static final String TAG_NETHER_TARGET_X = "quark:nether_x"; - private static final String TAG_NETHER_TARGET_Z = "quark:nether_z"; - - public static void tickCompass(Player player, ItemStack stack) { - boolean calculated = isCalculated(stack); - boolean nether = player.level.dimension().location().equals(LevelStem.NETHER.location()); - - if(calculated) { - boolean wasInNether = ItemNBTHelper.getBoolean(stack, TAG_WAS_IN_NETHER, false); - BlockPos pos = player.blockPosition(); - boolean isInPortal = player.level.getBlockState(pos).getBlock() == Blocks.NETHER_PORTAL; - - if(nether && !wasInNether && isInPortal) { - ItemNBTHelper.setInt(stack, TAG_NETHER_TARGET_X, pos.getX()); - ItemNBTHelper.setInt(stack, TAG_NETHER_TARGET_Z, pos.getZ()); - ItemNBTHelper.setBoolean(stack, TAG_WAS_IN_NETHER, true); - ItemNBTHelper.setBoolean(stack, TAG_POSITION_SET, true); - } else if(!nether && wasInNether) { - ItemNBTHelper.setBoolean(stack, TAG_WAS_IN_NETHER, false); - ItemNBTHelper.setBoolean(stack, TAG_POSITION_SET, false); - } - } else { - ItemNBTHelper.setBoolean(stack, TAG_CALCULATED, true); - ItemNBTHelper.setBoolean(stack, TAG_WAS_IN_NETHER, nether); - } - } - - static boolean isCalculated(ItemStack stack) { - return stack.hasTag() && ItemNBTHelper.getBoolean(stack, TAG_CALCULATED, false); - } - - @OnlyIn(Dist.CLIENT) - public static class Impl implements ItemPropertyFunction { - - private final Angle normalAngle = new Angle(); - private final Angle unknownAngle = new Angle(); - - @Override - @OnlyIn(Dist.CLIENT) - public float call(@Nonnull ItemStack stack, @Nullable ClientLevel worldIn, @Nullable LivingEntity entityIn, int id) { - if(entityIn == null && !stack.isFramed()) - return 0F; - - if(CompassesWorkEverywhereModule.enableCompassNerf && (!stack.hasTag() || !ItemNBTHelper.getBoolean(stack, TAG_CALCULATED, false))) - return 0F; - - boolean carried = entityIn != null; - Entity entity = carried ? entityIn : stack.getFrame(); - - if (entity == null) - return 0; - - if(worldIn == null && entity != null && entity.level instanceof ClientLevel level) - worldIn = level; - - double angle; - - boolean calculate = false; - BlockPos target = new BlockPos(0, 0, 0); - - ResourceLocation dimension = worldIn.dimension().location(); - boolean isLodestone = CompassItem.isLodestoneCompass(stack); - BlockPos lodestonePos = isLodestone ? this.getLodestonePosition(worldIn, stack.getOrCreateTag()) : null; - - if(lodestonePos != null) { - calculate = true; - target = lodestonePos; - } else if (!isLodestone) { - if (dimension.equals(LevelStem.END.location()) && CompassesWorkEverywhereModule.enableEnd) - calculate = true; - else if (dimension.equals(LevelStem.NETHER.location()) && isCalculated(stack) && CompassesWorkEverywhereModule.enableNether) { - boolean set = ItemNBTHelper.getBoolean(stack, TAG_POSITION_SET, false); - if (set) { - int x = ItemNBTHelper.getInt(stack, TAG_NETHER_TARGET_X, 0); - int z = ItemNBTHelper.getInt(stack, TAG_NETHER_TARGET_Z, 0); - calculate = true; - target = new BlockPos(x, 0, z); - } - } else if (worldIn.dimensionType().natural()) { - calculate = true; - target = getWorldSpawn(worldIn); - } - } - - long gameTime = worldIn.getGameTime(); - if(calculate && target != null) { - double d1 = carried ? entity.getYRot() : getFrameRotation((ItemFrame)entity); - d1 = Mth.positiveModulo(d1 / 360.0D, 1.0D); - double d2 = getAngleToPosition(entity, target) / (Math.PI * 2D); - - if(carried) { - if(normalAngle.needsUpdate(gameTime)) - normalAngle.wobble(gameTime, 0.5D - (d1 - 0.25D)); - angle = d2 + normalAngle.rotation; - } else angle = 0.5D - (d1 - 0.25D - d2); - } else { - if(unknownAngle.needsUpdate(gameTime)) - unknownAngle.wobble(gameTime, Math.random()); - - angle = unknownAngle.rotation + shift(id); - } - - return Mth.positiveModulo((float) angle, 1.0F); - } - - - private double getFrameRotation(ItemFrame frame) { - return Mth.wrapDegrees(180 + frame.getDirection().toYRot()); - } - - private double getAngleToPosition(Entity entity, BlockPos blockpos) { - Vec3 pos = entity.position(); - return Math.atan2(blockpos.getZ() - pos.z, blockpos.getX() - pos.x); - } - - // Magic number cribbed from vanilla - private float shift(int id) { - return (id * 1327217883) / (float) Integer.MAX_VALUE; - } - - // vanilla copy from here on out - - @Nullable - private BlockPos getLodestonePosition(Level world, CompoundTag tag) { - boolean flag = tag.contains("LodestonePos"); - boolean flag1 = tag.contains("LodestoneDimension"); - if (flag && flag1) { - Optional<ResourceKey<Level>> optional = CompassItem.getLodestoneDimension(tag); - if (optional.isPresent() && world.dimension().equals(optional.get())) { - return NbtUtils.readBlockPos(tag.getCompound("LodestonePos")); - } - } - - return null; - } - - @Nullable - private BlockPos getWorldSpawn(ClientLevel world) { - return world.dimensionType().natural() ? world.getSharedSpawnPos() : null; - } - - @OnlyIn(Dist.CLIENT) - private static class Angle { - private double rotation; - private double rota; - private long lastUpdateTick; - - private boolean needsUpdate(long tick) { - return lastUpdateTick != tick; - } - - private void wobble(long gameTime, double angle) { - lastUpdateTick = gameTime; - double d0 = angle - rotation; - d0 = Mth.positiveModulo(d0 + 0.5D, 1.0D) - 0.5D; - rota += d0 * 0.1D; - rota *= 0.8D; - rotation = Mth.positiveModulo(rotation + rota, 1.0D); - } - } - - } - - - - -} diff --git a/src/main/java/org/violetmoon/quark/content/tweaks/client/item/CompassAnglePropertyFunction.java b/src/main/java/org/violetmoon/quark/content/tweaks/client/item/CompassAnglePropertyFunction.java new file mode 100644 index 0000000000..ad0eb1521a --- /dev/null +++ b/src/main/java/org/violetmoon/quark/content/tweaks/client/item/CompassAnglePropertyFunction.java @@ -0,0 +1,159 @@ +package org.violetmoon.quark.content.tweaks.client.item; + +import java.util.Optional; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.item.ItemPropertyFunction; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtUtils; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.decoration.ItemFrame; +import net.minecraft.world.item.CompassItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.dimension.LevelStem; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import org.violetmoon.quark.content.tweaks.module.CompassesWorkEverywhereModule; +import org.violetmoon.zeta.util.ItemNBTHelper; + +@OnlyIn(Dist.CLIENT) +public class CompassAnglePropertyFunction implements ItemPropertyFunction { + + private final Angle normalAngle = new Angle(); + private final Angle unknownAngle = new Angle(); + + @Override + @OnlyIn(Dist.CLIENT) + public float call(@Nonnull ItemStack stack, @Nullable ClientLevel worldIn, @Nullable LivingEntity entityIn, int id) { + if(entityIn == null && !stack.isFramed()) + return 0F; + + if(CompassesWorkEverywhereModule.enableCompassNerf && (!stack.hasTag() || !ItemNBTHelper.getBoolean(stack, CompassesWorkEverywhereModule.TAG_COMPASS_CALCULATED, false))) + return 0F; + + boolean carried = entityIn != null; + Entity entity = carried ? entityIn : stack.getFrame(); + + if(entity == null) + return 0; + + if(worldIn == null && entity != null && entity.level instanceof ClientLevel level) + worldIn = level; + + double angle; + + boolean calculate = false; + BlockPos target = new BlockPos(0, 0, 0); + + ResourceLocation dimension = worldIn.dimension().location(); + boolean isLodestone = CompassItem.isLodestoneCompass(stack); + BlockPos lodestonePos = isLodestone ? this.getLodestonePosition(worldIn, stack.getOrCreateTag()) : null; + + if(lodestonePos != null) { + calculate = true; + target = lodestonePos; + } else if(!isLodestone) { + if(dimension.equals(LevelStem.END.location()) && CompassesWorkEverywhereModule.enableEnd) + calculate = true; + else if(dimension.equals(LevelStem.NETHER.location()) && CompassesWorkEverywhereModule.isCompassCalculated(stack) && CompassesWorkEverywhereModule.enableNether) { + boolean set = ItemNBTHelper.getBoolean(stack, CompassesWorkEverywhereModule.TAG_POSITION_SET, false); + if(set) { + int x = ItemNBTHelper.getInt(stack, CompassesWorkEverywhereModule.TAG_NETHER_TARGET_X, 0); + int z = ItemNBTHelper.getInt(stack, CompassesWorkEverywhereModule.TAG_NETHER_TARGET_Z, 0); + calculate = true; + target = new BlockPos(x, 0, z); + } + } else if(worldIn.dimensionType().natural()) { + calculate = true; + target = getWorldSpawn(worldIn); + } + } + + long gameTime = worldIn.getGameTime(); + if(calculate && target != null) { + double d1 = carried ? entity.getYRot() : getFrameRotation((ItemFrame) entity); + d1 = Mth.positiveModulo(d1 / 360.0D, 1.0D); + double d2 = getAngleToPosition(entity, target) / (Math.PI * 2D); + + if(carried) { + if(normalAngle.needsUpdate(gameTime)) + normalAngle.wobble(gameTime, 0.5D - (d1 - 0.25D)); + angle = d2 + normalAngle.rotation; + } else angle = 0.5D - (d1 - 0.25D - d2); + } else { + if(unknownAngle.needsUpdate(gameTime)) + unknownAngle.wobble(gameTime, Math.random()); + + angle = unknownAngle.rotation + shift(id); + } + + return Mth.positiveModulo((float) angle, 1.0F); + } + + + private double getFrameRotation(ItemFrame frame) { + return Mth.wrapDegrees(180 + frame.getDirection().toYRot()); + } + + private double getAngleToPosition(Entity entity, BlockPos blockpos) { + Vec3 pos = entity.position(); + return Math.atan2(blockpos.getZ() - pos.z, blockpos.getX() - pos.x); + } + + // Magic number cribbed from vanilla + private float shift(int id) { + return (id * 1327217883) / (float) Integer.MAX_VALUE; + } + + // vanilla copy from here on out + + @Nullable + private BlockPos getLodestonePosition(Level world, CompoundTag tag) { + boolean flag = tag.contains("LodestonePos"); + boolean flag1 = tag.contains("LodestoneDimension"); + if(flag && flag1) { + Optional<ResourceKey<Level>> optional = CompassItem.getLodestoneDimension(tag); + if(optional.isPresent() && world.dimension().equals(optional.get())) { + return NbtUtils.readBlockPos(tag.getCompound("LodestonePos")); + } + } + + return null; + } + + @Nullable + private BlockPos getWorldSpawn(ClientLevel world) { + return world.dimensionType().natural() ? world.getSharedSpawnPos() : null; + } + + @OnlyIn(Dist.CLIENT) + private static class Angle { + private double rotation; + private double rota; + private long lastUpdateTick; + + private boolean needsUpdate(long tick) { + return lastUpdateTick != tick; + } + + private void wobble(long gameTime, double angle) { + lastUpdateTick = gameTime; + double d0 = angle - rotation; + d0 = Mth.positiveModulo(d0 + 0.5D, 1.0D) - 0.5D; + rota += d0 * 0.1D; + rota *= 0.8D; + rotation = Mth.positiveModulo(rotation + rota, 1.0D); + } + } + +} diff --git a/src/main/java/org/violetmoon/quark/content/tweaks/client/render/entity/DyedItemFrameRenderer.java b/src/main/java/org/violetmoon/quark/content/tweaks/client/render/entity/DyedItemFrameRenderer.java index 6d06dba290..ce5553c043 100644 --- a/src/main/java/org/violetmoon/quark/content/tweaks/client/render/entity/DyedItemFrameRenderer.java +++ b/src/main/java/org/violetmoon/quark/content/tweaks/client/render/entity/DyedItemFrameRenderer.java @@ -27,11 +27,8 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; // yes this shit again -@OnlyIn(Dist.CLIENT) public class DyedItemFrameRenderer extends EntityRenderer<DyedItemFrame> { private static final ModelResourceLocation FRAME_LOCATION = new ModelResourceLocation(Quark.MOD_ID, "extra/dyed_item_frame", "inventory"); diff --git a/src/main/java/org/violetmoon/quark/content/tweaks/module/CompassesWorkEverywhereModule.java b/src/main/java/org/violetmoon/quark/content/tweaks/module/CompassesWorkEverywhereModule.java index d6ff05d107..3d86de9933 100644 --- a/src/main/java/org/violetmoon/quark/content/tweaks/module/CompassesWorkEverywhereModule.java +++ b/src/main/java/org/violetmoon/quark/content/tweaks/module/CompassesWorkEverywhereModule.java @@ -1,8 +1,12 @@ package org.violetmoon.quark.content.tweaks.module; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.dimension.LevelStem; import org.violetmoon.quark.base.config.Config; -import org.violetmoon.quark.content.tweaks.client.item.ClockTimeGetter; -import org.violetmoon.quark.content.tweaks.client.item.CompassAngleGetter; +import org.violetmoon.quark.content.tweaks.client.item.ClockTimePropertyFunction; +import org.violetmoon.quark.content.tweaks.client.item.CompassAnglePropertyFunction; import org.violetmoon.zeta.client.event.load.ZClientSetup; import org.violetmoon.zeta.event.bus.LoadEvent; import org.violetmoon.zeta.event.bus.PlayEvent; @@ -20,10 +24,12 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import org.violetmoon.zeta.util.ItemNBTHelper; @ZetaLoadModule(category = "tweaks") public class CompassesWorkEverywhereModule extends ZetaModule { + @Config public static boolean enableCompassNerf = true; @Config(flag = "clock_nerf") public static boolean enableClockNerf = true; @@ -60,12 +66,58 @@ public void onUpdate(ZPlayerTick.Start event) { for(int i = 0; i < inventory.getContainerSize(); i++) { ItemStack stack = inventory.getItem(i); if(stack.getItem() == Items.COMPASS) - CompassAngleGetter.tickCompass(event.getPlayer(), stack); + tickCompass(event.getPlayer(), stack); else if(stack.getItem() == Items.CLOCK) - ClockTimeGetter.tickClock(stack); + tickClock(stack); + } + } + + public static final String TAG_CLOCK_CALCULATED = "quark:clock_calculated"; + + public static void tickClock(ItemStack stack) { + boolean calculated = isClockCalculated(stack); + if(!calculated) + ItemNBTHelper.setBoolean(stack, TAG_CLOCK_CALCULATED, true); + } + + public static boolean isClockCalculated(ItemStack stack) { + return stack.hasTag() && ItemNBTHelper.getBoolean(stack, TAG_CLOCK_CALCULATED, false); + } + + public static final String TAG_COMPASS_CALCULATED = "quark:compass_calculated"; + public static final String TAG_WAS_IN_NETHER = "quark:compass_in_nether"; + public static final String TAG_POSITION_SET = "quark:compass_position_set"; + public static final String TAG_NETHER_TARGET_X = "quark:nether_x"; + public static final String TAG_NETHER_TARGET_Z = "quark:nether_z"; + + public static void tickCompass(Player player, ItemStack stack) { + boolean calculated = isCompassCalculated(stack); + boolean nether = player.level.dimension().location().equals(LevelStem.NETHER.location()); + + if(calculated) { + boolean wasInNether = ItemNBTHelper.getBoolean(stack, TAG_WAS_IN_NETHER, false); + BlockPos pos = player.blockPosition(); + boolean isInPortal = player.level.getBlockState(pos).getBlock() == Blocks.NETHER_PORTAL; + + if(nether && !wasInNether && isInPortal) { + ItemNBTHelper.setInt(stack, TAG_NETHER_TARGET_X, pos.getX()); + ItemNBTHelper.setInt(stack, TAG_NETHER_TARGET_Z, pos.getZ()); + ItemNBTHelper.setBoolean(stack, TAG_WAS_IN_NETHER, true); + ItemNBTHelper.setBoolean(stack, TAG_POSITION_SET, true); + } else if(!nether && wasInNether) { + ItemNBTHelper.setBoolean(stack, TAG_WAS_IN_NETHER, false); + ItemNBTHelper.setBoolean(stack, TAG_POSITION_SET, false); + } + } else { + ItemNBTHelper.setBoolean(stack, TAG_COMPASS_CALCULATED, true); + ItemNBTHelper.setBoolean(stack, TAG_WAS_IN_NETHER, nether); } } + public static boolean isCompassCalculated(ItemStack stack) { + return stack.hasTag() && ItemNBTHelper.getBoolean(stack, TAG_COMPASS_CALCULATED, false); + } + @ZetaLoadModule(clientReplacement = true) public static class Client extends CompassesWorkEverywhereModule { @@ -76,10 +128,10 @@ public void clientSetup(ZClientSetup e) { return; if(enableCompassNerf || enableNether || enableEnd) - ItemProperties.register(Items.COMPASS, new ResourceLocation("angle"), new CompassAngleGetter.Impl()); + ItemProperties.register(Items.COMPASS, new ResourceLocation("angle"), new CompassAnglePropertyFunction()); if(enableClockNerf) - ItemProperties.register(Items.CLOCK, new ResourceLocation("time"), new ClockTimeGetter.Impl()); + ItemProperties.register(Items.CLOCK, new ResourceLocation("time"), new ClockTimePropertyFunction()); }); } diff --git a/src/main/java/org/violetmoon/quark/content/world/block/GlowLichenGrowthBlock.java b/src/main/java/org/violetmoon/quark/content/world/block/GlowLichenGrowthBlock.java index a222938b12..cca5273351 100644 --- a/src/main/java/org/violetmoon/quark/content/world/block/GlowLichenGrowthBlock.java +++ b/src/main/java/org/violetmoon/quark/content/world/block/GlowLichenGrowthBlock.java @@ -25,8 +25,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; public class GlowLichenGrowthBlock extends QuarkBushBlock implements BonemealableBlock { @@ -40,7 +38,6 @@ public GlowLichenGrowthBlock(ZetaModule module) { } @Override - @OnlyIn(Dist.CLIENT) public void animateTick(@Nonnull BlockState stateIn, @Nonnull Level worldIn, @Nonnull BlockPos pos, @Nonnull RandomSource rand) { super.animateTick(stateIn, worldIn, pos, rand); diff --git a/src/main/java/org/violetmoon/quark/content/world/block/GlowShroomBlock.java b/src/main/java/org/violetmoon/quark/content/world/block/GlowShroomBlock.java index 91785b3f20..aad378268a 100644 --- a/src/main/java/org/violetmoon/quark/content/world/block/GlowShroomBlock.java +++ b/src/main/java/org/violetmoon/quark/content/world/block/GlowShroomBlock.java @@ -18,8 +18,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; public class GlowShroomBlock extends QuarkBushBlock implements BonemealableBlock { @@ -33,7 +31,6 @@ public GlowShroomBlock(ZetaModule module) { } @Override - @OnlyIn(Dist.CLIENT) public void animateTick(@Nonnull BlockState stateIn, @Nonnull Level worldIn, @Nonnull BlockPos pos, @Nonnull RandomSource rand) { super.animateTick(stateIn, worldIn, pos, rand); diff --git a/src/main/java/org/violetmoon/quark/content/world/block/HugeGlowShroomBlock.java b/src/main/java/org/violetmoon/quark/content/world/block/HugeGlowShroomBlock.java index d559b1d793..394b3c0daa 100644 --- a/src/main/java/org/violetmoon/quark/content/world/block/HugeGlowShroomBlock.java +++ b/src/main/java/org/violetmoon/quark/content/world/block/HugeGlowShroomBlock.java @@ -23,8 +23,6 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.HugeMushroomBlock; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; public class HugeGlowShroomBlock extends HugeMushroomBlock implements IQuarkBlock { @@ -61,7 +59,6 @@ public int getFireSpreadSpeedZeta(BlockState state, BlockGetter world, BlockPos } @Override - @OnlyIn(Dist.CLIENT) public void animateTick(@Nonnull BlockState stateIn, @Nonnull Level worldIn, @Nonnull BlockPos pos, @Nonnull RandomSource rand) { super.animateTick(stateIn, worldIn, pos, rand); diff --git a/src/main/java/org/violetmoon/quark/mixin/client/ItemInHandRendererMixin.java b/src/main/java/org/violetmoon/quark/mixin/client/ItemInHandRendererMixin.java index c6cffdfd9c..27d5823a06 100644 --- a/src/main/java/org/violetmoon/quark/mixin/client/ItemInHandRendererMixin.java +++ b/src/main/java/org/violetmoon/quark/mixin/client/ItemInHandRendererMixin.java @@ -14,7 +14,7 @@ public class ItemInHandRendererMixin { @ModifyVariable(method = "renderArmWithItem", at = @At("HEAD"), argsOnly = true) private ItemStack renderArmWithItem(ItemStack stack, AbstractClientPlayer player) { - return VariantSelectorModule.modifyHeldItemStack(player, stack); + return VariantSelectorModule.Client.modifyHeldItemStack(player, stack); } diff --git a/src/main/java/org/violetmoon/quark/mixin/client/LevelRendererMixin.java b/src/main/java/org/violetmoon/quark/mixin/client/LevelRendererMixin.java index 360e04add6..160340ee08 100644 --- a/src/main/java/org/violetmoon/quark/mixin/client/LevelRendererMixin.java +++ b/src/main/java/org/violetmoon/quark/mixin/client/LevelRendererMixin.java @@ -9,6 +9,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.violetmoon.quark.base.item.QuarkMusicDiscItem; +import org.violetmoon.quark.content.tools.module.AmbientDiscsModule; @Mixin(LevelRenderer.class) public class LevelRendererMixin { @@ -18,7 +19,7 @@ public class LevelRendererMixin { at = @At(value = "JUMP", ordinal = 1), cancellable = true) public void playStreamingMusic(SoundEvent soundIn, BlockPos pos, RecordItem musicDiscItem, CallbackInfo info) { - if(musicDiscItem instanceof QuarkMusicDiscItem quarkDisc && quarkDisc.playAmbientSound(pos)) + if(musicDiscItem instanceof QuarkMusicDiscItem quarkDisc && AmbientDiscsModule.Client.playAmbientSound(quarkDisc, pos)) info.cancel(); } diff --git a/src/main/java/org/violetmoon/zeta/Zeta.java b/src/main/java/org/violetmoon/zeta/Zeta.java index 6e57da896a..16320d4cba 100644 --- a/src/main/java/org/violetmoon/zeta/Zeta.java +++ b/src/main/java/org/violetmoon/zeta/Zeta.java @@ -55,6 +55,7 @@ public Zeta(String modid, Logger log, ZetaSide side) { this.capabilityManager = createCapabilityManager(); loadBus.subscribe(craftingExtensions) + .subscribe(dyeables) .subscribe(brewingRegistry); } @@ -110,7 +111,7 @@ public RenderLayerRegistry createRenderLayerRegistry() { } public abstract CraftingExtensionsRegistry createCraftingExtensionsRegistry(); public DyeablesRegistry createDyeablesRegistry() { - return new DyeablesRegistry(this); + return new DyeablesRegistry(); } public abstract BrewingRegistry createBrewingRegistry(); public abstract ZetaNetworkHandler createNetworkHandler(String modid, int protocolVersion); diff --git a/src/main/java/org/violetmoon/zeta/registry/DyeablesRegistry.java b/src/main/java/org/violetmoon/zeta/registry/DyeablesRegistry.java index 2f757e21ce..243e03ff70 100644 --- a/src/main/java/org/violetmoon/zeta/registry/DyeablesRegistry.java +++ b/src/main/java/org/violetmoon/zeta/registry/DyeablesRegistry.java @@ -30,16 +30,10 @@ * @see org.violetmoon.zeta.client.ClientRegistryExtension */ public class DyeablesRegistry { - protected final Zeta z; public final Map<Item, Supplier<Boolean>> dyeableConditions = new HashMap<>(); public final DyeableLeatherItem SURROGATE = new DyeableLeatherItem() {}; //Simply an accessor for various DyeableLeatherItem default methods - public DyeablesRegistry(Zeta z) { - this.z = z; - z.loadBus.subscribe(this); - } - @LoadEvent public void register(ZRegister event) { ResourceLocation id = event.getRegistry().newResourceLocation("dye_item"); diff --git a/src/main/java/org/violetmoon/zeta/registry/ZetaRegistry.java b/src/main/java/org/violetmoon/zeta/registry/ZetaRegistry.java index 2cfb23c174..02018f2064 100644 --- a/src/main/java/org/violetmoon/zeta/registry/ZetaRegistry.java +++ b/src/main/java/org/violetmoon/zeta/registry/ZetaRegistry.java @@ -8,6 +8,7 @@ import java.util.function.BiConsumer; import java.util.function.BooleanSupplier; import java.util.function.Supplier; +import java.util.stream.Collectors; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; @@ -149,6 +150,11 @@ public void clearDeferCache(ResourceLocation resourceLocation) { defers.removeAll(resourceLocation); } + public void assertAllRegistered() { + if(!defers.isEmpty()) + throw new IllegalStateException("Some defers were not registered: " + defers.keys().stream().map(ResourceLocation::toString).collect(Collectors.joining(", "))); + } + public void finalizeBlockColors(BiConsumer<Block, String> consumer) { blocksToColorProviderName.forEach(consumer); blocksToColorProviderName.clear(); diff --git a/src/main/java/org/violetmoon/zetaimplforge/ForgeZeta.java b/src/main/java/org/violetmoon/zetaimplforge/ForgeZeta.java index 88d4551f5a..70e8187c49 100644 --- a/src/main/java/org/violetmoon/zetaimplforge/ForgeZeta.java +++ b/src/main/java/org/violetmoon/zetaimplforge/ForgeZeta.java @@ -224,6 +224,7 @@ public void registerHighest(RegisterEvent e) { return; loadBus.fire(new ZRegister(this)); + registry.assertAllRegistered(); loadBus.fire(new ZRegister.Post()); registerDone = true;