mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-08-26 23:42:18 +00:00
Merge pull request #42 from Toad-Dev/merith-buffer-fix
Fix: Monitor render buffers not being released properly.
This commit is contained in:
commit
4d1a950fbf
@ -30,7 +30,7 @@ import dan200.computercraft.core.apis.ApiFactories;
|
||||
import dan200.computercraft.core.asm.GenericMethod;
|
||||
import dan200.computercraft.core.filesystem.FileMount;
|
||||
import dan200.computercraft.core.filesystem.ResourceMount;
|
||||
import dan200.computercraft.mixin.MinecraftServerAccess;
|
||||
import dan200.computercraft.fabric.mixin.MinecraftServerAccess;
|
||||
import dan200.computercraft.shared.BundledRedstone;
|
||||
import dan200.computercraft.shared.MediaProviders;
|
||||
import dan200.computercraft.shared.Peripherals;
|
||||
|
@ -10,7 +10,7 @@ import java.util.Objects;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import dan200.computercraft.mixin.AffineTransformationAccess;
|
||||
import dan200.computercraft.fabric.mixin.AffineTransformationAccess;
|
||||
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.render.model.BakedModel;
|
||||
|
@ -8,7 +8,7 @@ package dan200.computercraft.client;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import dan200.computercraft.mixin.ChatHudAccess;
|
||||
import dan200.computercraft.fabric.mixin.ChatHudAccess;
|
||||
import dan200.computercraft.shared.command.text.ChatHelpers;
|
||||
import dan200.computercraft.shared.command.text.TableBuilder;
|
||||
import dan200.computercraft.shared.command.text.TableFormatter;
|
||||
|
@ -20,9 +20,11 @@ import dan200.computercraft.client.render.TileEntityMonitorRenderer;
|
||||
import dan200.computercraft.client.render.TileEntityTurtleRenderer;
|
||||
import dan200.computercraft.client.render.TurtleModelLoader;
|
||||
import dan200.computercraft.client.render.TurtlePlayerRenderer;
|
||||
import dan200.computercraft.fabric.events.ClientUnloadWorldEvent;
|
||||
import dan200.computercraft.shared.ComputerCraftRegistry;
|
||||
import dan200.computercraft.shared.common.ContainerHeldItem;
|
||||
import dan200.computercraft.shared.common.IColouredItem;
|
||||
import dan200.computercraft.shared.common.TileGeneric;
|
||||
import dan200.computercraft.shared.computer.inventory.ContainerComputer;
|
||||
import dan200.computercraft.shared.computer.inventory.ContainerViewComputer;
|
||||
import dan200.computercraft.shared.peripheral.diskdrive.ContainerDiskDrive;
|
||||
@ -32,6 +34,7 @@ import dan200.computercraft.shared.pocket.inventory.ContainerPocketComputer;
|
||||
import dan200.computercraft.shared.pocket.items.ItemPocketComputer;
|
||||
import dan200.computercraft.shared.turtle.inventory.ContainerTurtle;
|
||||
|
||||
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientBlockEntityEvents;
|
||||
import net.minecraft.client.item.ModelPredicateProvider;
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
import net.minecraft.item.Item;
|
||||
@ -47,14 +50,19 @@ import net.fabricmc.fabric.api.client.rendereregistry.v1.BlockEntityRendererRegi
|
||||
import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry;
|
||||
import net.fabricmc.fabric.api.client.screenhandler.v1.ScreenRegistry;
|
||||
import net.fabricmc.fabric.api.event.client.ClientSpriteRegistryCallback;
|
||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerWorldEvents;
|
||||
import net.fabricmc.fabric.mixin.object.builder.ModelPredicateProviderRegistrySpecificAccessor;
|
||||
|
||||
@Environment (EnvType.CLIENT)
|
||||
public final class ComputerCraftProxyClient implements ClientModInitializer {
|
||||
|
||||
public static void initEvents() {
|
||||
private static void initEvents() {
|
||||
ClientBlockEntityEvents.BLOCK_ENTITY_UNLOAD.register( ( blockEntity, world ) -> {
|
||||
if(blockEntity instanceof TileGeneric ) {
|
||||
((TileGeneric)blockEntity).onChunkUnloaded();
|
||||
}
|
||||
});
|
||||
|
||||
ClientUnloadWorldEvent.EVENT.register( () -> ClientMonitor.destroyAll() );
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -96,13 +104,9 @@ public final class ComputerCraftProxyClient implements ClientModInitializer {
|
||||
() -> ComputerCraftRegistry.ModItems.POCKET_COMPUTER_ADVANCED);
|
||||
ClientRegistry.onItemColours();
|
||||
|
||||
// TODO Verify this does things properly
|
||||
ServerWorldEvents.UNLOAD.register(((minecraftServer, serverWorld) -> {
|
||||
ClientMonitor.destroyAll();
|
||||
}));
|
||||
initEvents();
|
||||
}
|
||||
|
||||
|
||||
// My IDE doesn't think so, but we do actually need these generics.
|
||||
private static void registerContainers() {
|
||||
ScreenRegistry.<ContainerComputer, GuiComputer<ContainerComputer>>register(ComputerCraftRegistry.ModContainers.COMPUTER, GuiComputer::create);
|
||||
@ -125,15 +129,4 @@ public final class ComputerCraftProxyClient implements ClientModInitializer {
|
||||
ModelPredicateProviderRegistrySpecificAccessor.callRegister(item.get(), id, getter);
|
||||
}
|
||||
}
|
||||
|
||||
// @Mod.EventBusSubscriber (modid = ComputerCraft.MOD_ID, value = Dist.CLIENT)
|
||||
// public static final class ForgeHandlers {
|
||||
// @SubscribeEvent
|
||||
// public static void onWorldUnload(WorldEvent.Unload event) {
|
||||
// if (event.getWorld()
|
||||
// .isClient()) {
|
||||
// ClientMonitor.destroyAll();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
package dan200.computercraft.client.render;
|
||||
|
||||
import dan200.computercraft.mixin.HeldItemRendererAccess;
|
||||
import dan200.computercraft.fabric.mixin.HeldItemRendererAccess;
|
||||
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.render.VertexConsumerProvider;
|
||||
|
@ -8,7 +8,7 @@ package dan200.computercraft.client.render;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import dan200.computercraft.mixin.BakedQuadAccess;
|
||||
import dan200.computercraft.fabric.mixin.BakedQuadAccess;
|
||||
|
||||
import net.minecraft.client.render.VertexFormat;
|
||||
import net.minecraft.client.render.VertexFormatElement;
|
||||
|
@ -0,0 +1,17 @@
|
||||
package dan200.computercraft.fabric.events;
|
||||
|
||||
import net.fabricmc.fabric.api.event.Event;
|
||||
import net.fabricmc.fabric.api.event.EventFactory;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface ClientUnloadWorldEvent
|
||||
{
|
||||
Event<ClientUnloadWorldEvent> EVENT = EventFactory.createArrayBacked( ClientUnloadWorldEvent.class,
|
||||
callbacks -> () -> {
|
||||
for( ClientUnloadWorldEvent callback : callbacks) {
|
||||
callback.onClientUnloadWorld();
|
||||
}
|
||||
});
|
||||
|
||||
void onClientUnloadWorld();
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package dan200.computercraft.mixin;
|
||||
package dan200.computercraft.fabric.mixin;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
@ -1,4 +1,4 @@
|
||||
package dan200.computercraft.mixin;
|
||||
package dan200.computercraft.fabric.mixin;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
@ -1,4 +1,4 @@
|
||||
package dan200.computercraft.mixin;
|
||||
package dan200.computercraft.fabric.mixin;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Invoker;
|
@ -1,4 +1,4 @@
|
||||
package dan200.computercraft.mixin;
|
||||
package dan200.computercraft.fabric.mixin;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Invoker;
|
@ -1,4 +1,4 @@
|
||||
package dan200.computercraft.mixin;
|
||||
package dan200.computercraft.fabric.mixin;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
@ -4,7 +4,7 @@
|
||||
* Send enquiries to dratcliffe@gmail.com
|
||||
*/
|
||||
|
||||
package dan200.computercraft.mixin;
|
||||
package dan200.computercraft.fabric.mixin;
|
||||
|
||||
import dan200.computercraft.shared.util.DropConsumer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
@ -4,7 +4,7 @@
|
||||
* Send enquiries to dratcliffe@gmail.com
|
||||
*/
|
||||
|
||||
package dan200.computercraft.mixin;
|
||||
package dan200.computercraft.fabric.mixin;
|
||||
|
||||
import dan200.computercraft.shared.util.DropConsumer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
@ -4,12 +4,11 @@
|
||||
* Send enquiries to dratcliffe@gmail.com
|
||||
*/
|
||||
|
||||
package dan200.computercraft.mixin;
|
||||
package dan200.computercraft.fabric.mixin;
|
||||
|
||||
import dan200.computercraft.client.render.ItemPocketRenderer;
|
||||
import dan200.computercraft.client.render.ItemPrintoutRenderer;
|
||||
import dan200.computercraft.shared.media.items.ItemPrintout;
|
||||
import dan200.computercraft.shared.mixed.MixedFirstPersonRenderer;
|
||||
import dan200.computercraft.shared.pocket.items.ItemPocketComputer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
@ -30,22 +29,12 @@ import net.fabricmc.api.Environment;
|
||||
|
||||
@Mixin (HeldItemRenderer.class)
|
||||
@Environment (EnvType.CLIENT)
|
||||
public class MixinHeldItemRenderer implements MixedFirstPersonRenderer {
|
||||
@Override
|
||||
public void renderArmFirstPerson_CC(MatrixStack stack, VertexConsumerProvider consumerProvider, int light, float equip, float swing, Arm hand) {
|
||||
this.renderArmHoldingItem(stack, consumerProvider, light, equip, swing, hand);
|
||||
}
|
||||
|
||||
public class MixinHeldItemRenderer {
|
||||
@Shadow
|
||||
private void renderArmHoldingItem(MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, float equipProgress, float swingProgress,
|
||||
Arm arm) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMapAngleFromPitch_CC(float pitch) {
|
||||
return this.getMapAngle(pitch);
|
||||
}
|
||||
|
||||
@Shadow
|
||||
private float getMapAngle(float pitch) {
|
||||
return 0;
|
@ -4,7 +4,7 @@
|
||||
* Send enquiries to dratcliffe@gmail.com
|
||||
*/
|
||||
|
||||
package dan200.computercraft.mixin;
|
||||
package dan200.computercraft.fabric.mixin;
|
||||
|
||||
import dan200.computercraft.client.render.ItemPrintoutRenderer;
|
||||
import dan200.computercraft.shared.media.items.ItemPrintout;
|
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* This file is part of ComputerCraft - http://www.computercraft.info
|
||||
* Copyright Daniel Ratcliffe, 2011-2019. Do not distribute without permission.
|
||||
* Send enquiries to dratcliffe@gmail.com
|
||||
*/
|
||||
|
||||
package dan200.computercraft.fabric.mixin;
|
||||
|
||||
import dan200.computercraft.client.FrameInfo;
|
||||
import dan200.computercraft.fabric.events.ClientUnloadWorldEvent;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
|
||||
@Mixin (MinecraftClient.class)
|
||||
public abstract class MixinMinecraftClient
|
||||
{
|
||||
@Inject (method = "render", at = @At ("HEAD"))
|
||||
private void onRender(CallbackInfo info) {
|
||||
FrameInfo.onRenderFrame();
|
||||
}
|
||||
|
||||
@Inject(method = "disconnect(Lnet/minecraft/client/gui/screen/Screen;)V", at = @At ("RETURN"))
|
||||
private void disconnectAfter(Screen screen, CallbackInfo info) {
|
||||
ClientUnloadWorldEvent.EVENT.invoker().onClientUnloadWorld();
|
||||
}
|
||||
|
||||
@Inject(method = "joinWorld", at = @At("RETURN"))
|
||||
private void joinWorldAfter(ClientWorld world, CallbackInfo info) {
|
||||
ClientUnloadWorldEvent.EVENT.invoker().onClientUnloadWorld();
|
||||
}
|
||||
}
|
@ -4,7 +4,7 @@
|
||||
* Send enquiries to dratcliffe@gmail.com
|
||||
*/
|
||||
|
||||
package dan200.computercraft.mixin;
|
||||
package dan200.computercraft.fabric.mixin;
|
||||
|
||||
import dan200.computercraft.shared.command.ClientCommands;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
@ -4,7 +4,7 @@
|
||||
* Send enquiries to dratcliffe@gmail.com
|
||||
*/
|
||||
|
||||
package dan200.computercraft.mixin;
|
||||
package dan200.computercraft.fabric.mixin;
|
||||
|
||||
import dan200.computercraft.shared.util.DropConsumer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
@ -4,7 +4,7 @@
|
||||
* Send enquiries to dratcliffe@gmail.com
|
||||
*/
|
||||
|
||||
package dan200.computercraft.mixin;
|
||||
package dan200.computercraft.fabric.mixin;
|
||||
|
||||
import java.util.Collection;
|
||||
|
@ -4,7 +4,7 @@
|
||||
* Send enquiries to dratcliffe@gmail.com
|
||||
*/
|
||||
|
||||
package dan200.computercraft.mixin;
|
||||
package dan200.computercraft.fabric.mixin;
|
||||
|
||||
import dan200.computercraft.client.render.CableHighlightRenderer;
|
||||
import dan200.computercraft.client.render.MonitorHighlightRenderer;
|
@ -1,4 +1,4 @@
|
||||
package dan200.computercraft.mixin;
|
||||
package dan200.computercraft.fabric.mixin;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
@ -1,4 +1,4 @@
|
||||
package dan200.computercraft.mixin;
|
||||
package dan200.computercraft.fabric.mixin;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
@ -1,4 +1,4 @@
|
||||
package dan200.computercraft.mixin;
|
||||
package dan200.computercraft.fabric.mixin;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Invoker;
|
@ -1,23 +0,0 @@
|
||||
/*
|
||||
* This file is part of ComputerCraft - http://www.computercraft.info
|
||||
* Copyright Daniel Ratcliffe, 2011-2019. Do not distribute without permission.
|
||||
* Send enquiries to dratcliffe@gmail.com
|
||||
*/
|
||||
|
||||
package dan200.computercraft.mixin;
|
||||
|
||||
import dan200.computercraft.client.FrameInfo;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
|
||||
@Mixin (MinecraftClient.class)
|
||||
public abstract class MixinMinecraftGame {
|
||||
@Inject (method = "render", at = @At ("HEAD"))
|
||||
private void onRender(CallbackInfo info) {
|
||||
FrameInfo.onRenderFrame();
|
||||
}
|
||||
}
|
@ -28,6 +28,9 @@ public abstract class TileGeneric extends BlockEntity implements BlockEntityClie
|
||||
public void destroy() {
|
||||
}
|
||||
|
||||
public void onChunkUnloaded() {
|
||||
}
|
||||
|
||||
public final void updateBlock() {
|
||||
this.markDirty();
|
||||
BlockPos pos = this.getPos();
|
||||
|
@ -77,6 +77,12 @@ public abstract class TileComputerBase extends TileGeneric implements IComputerT
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChunkUnloaded()
|
||||
{
|
||||
unload();
|
||||
}
|
||||
|
||||
protected void unload() {
|
||||
if (this.m_instanceID >= 0) {
|
||||
if (!this.getWorld().isClient) {
|
||||
|
@ -1,17 +0,0 @@
|
||||
/*
|
||||
* This file is part of ComputerCraft - http://www.computercraft.info
|
||||
* Copyright Daniel Ratcliffe, 2011-2019. Do not distribute without permission.
|
||||
* Send enquiries to dratcliffe@gmail.com
|
||||
*/
|
||||
|
||||
package dan200.computercraft.shared.mixed;
|
||||
|
||||
import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.util.Arm;
|
||||
|
||||
public interface MixedFirstPersonRenderer {
|
||||
void renderArmFirstPerson_CC(MatrixStack stack, VertexConsumerProvider consumerProvider, int light, float equip, float swing, Arm hand);
|
||||
|
||||
float getMapAngleFromPitch_CC(float pitch);
|
||||
}
|
@ -8,7 +8,7 @@ package dan200.computercraft.shared.network.client;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import dan200.computercraft.mixin.SoundEventAccess;
|
||||
import dan200.computercraft.fabric.mixin.SoundEventAccess;
|
||||
import dan200.computercraft.shared.network.NetworkMessage;
|
||||
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
|
@ -83,6 +83,13 @@ public class TileCable extends TileGeneric implements IPeripheralTile {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChunkUnloaded()
|
||||
{
|
||||
super.onChunkUnloaded();
|
||||
onRemove();
|
||||
}
|
||||
|
||||
private void onRemove() {
|
||||
if (this.world == null || !this.world.isClient) {
|
||||
this.m_node.remove();
|
||||
|
@ -74,6 +74,13 @@ public class TileWiredModemFull extends TileGeneric implements IPeripheralTile {
|
||||
super.destroy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChunkUnloaded()
|
||||
{
|
||||
super.onChunkUnloaded();
|
||||
doRemove();
|
||||
}
|
||||
|
||||
private void doRemove() {
|
||||
if (this.world == null || !this.world.isClient) {
|
||||
this.m_node.remove();
|
||||
|
@ -79,6 +79,23 @@ public class TileMonitor extends TileGeneric implements IPeripheralTile {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markRemoved() {
|
||||
super.markRemoved();
|
||||
if (this.m_clientMonitor != null && this.m_xIndex == 0 && this.m_yIndex == 0) {
|
||||
this.m_clientMonitor.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChunkUnloaded() {
|
||||
super.onChunkUnloaded();
|
||||
if (this.m_clientMonitor != null && this.m_xIndex == 0 && this.m_yIndex == 0) {
|
||||
this.m_clientMonitor.destroy();
|
||||
}
|
||||
this.m_clientMonitor = null;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public ActionResult onActivate(PlayerEntity player, Hand hand, BlockHitResult hit) {
|
||||
@ -262,15 +279,6 @@ public class TileMonitor extends TileGeneric implements IPeripheralTile {
|
||||
return ComputerCraft.monitorDistanceSq;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Environment (EnvType.CLIENT)
|
||||
public void markRemoved() {
|
||||
super.markRemoved();
|
||||
if (this.m_clientMonitor != null && this.m_xIndex == 0 && this.m_yIndex == 0) {
|
||||
this.m_clientMonitor.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
// Sizing and placement stuff
|
||||
|
||||
@Override
|
||||
|
@ -18,7 +18,7 @@ import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.lua.LuaException;
|
||||
import dan200.computercraft.api.lua.LuaFunction;
|
||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||
import dan200.computercraft.mixin.SoundEventAccess;
|
||||
import dan200.computercraft.fabric.mixin.SoundEventAccess;
|
||||
|
||||
import net.minecraft.block.enums.Instrument;
|
||||
import net.minecraft.network.packet.s2c.play.PlaySoundIdS2CPacket;
|
||||
@ -100,13 +100,13 @@ public abstract class SpeakerPeripheral implements IPeripheral {
|
||||
|
||||
float adjVolume = Math.min(volume, 3.0f);
|
||||
server.getPlayerManager()
|
||||
.sendToAround(null,
|
||||
pos.x,
|
||||
pos.y,
|
||||
pos.z,
|
||||
adjVolume > 1.0f ? 16 * adjVolume : 16.0,
|
||||
world.getRegistryKey(),
|
||||
new PlaySoundIdS2CPacket(name, SoundCategory.RECORDS, pos, adjVolume, pitch));
|
||||
.sendToAround(null,
|
||||
pos.x,
|
||||
pos.y,
|
||||
pos.z,
|
||||
adjVolume > 1.0f ? 16 * adjVolume : 16.0,
|
||||
world.getRegistryKey(),
|
||||
new PlaySoundIdS2CPacket(name, SoundCategory.RECORDS, pos, adjVolume, pitch));
|
||||
return null;
|
||||
});
|
||||
|
||||
@ -141,7 +141,7 @@ public abstract class SpeakerPeripheral implements IPeripheral {
|
||||
Instrument instrument = null;
|
||||
for (Instrument testInstrument : Instrument.values()) {
|
||||
if (testInstrument.asString()
|
||||
.equalsIgnoreCase(name)) {
|
||||
.equalsIgnoreCase(name)) {
|
||||
instrument = testInstrument;
|
||||
break;
|
||||
}
|
||||
@ -154,10 +154,10 @@ public abstract class SpeakerPeripheral implements IPeripheral {
|
||||
|
||||
// If the resource location for note block notes changes, this method call will need to be updated
|
||||
boolean success = this.playSound(context,
|
||||
((SoundEventAccess)instrument.getSound()).getId(),
|
||||
volume,
|
||||
(float) Math.pow(2.0, (pitch - 12.0) / 12.0),
|
||||
true);
|
||||
((SoundEventAccess)instrument.getSound()).getId(),
|
||||
volume,
|
||||
(float) Math.pow(2.0, (pitch - 12.0) / 12.0),
|
||||
true);
|
||||
if (success) {
|
||||
this.m_notesThisTick.incrementAndGet();
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ import dan200.computercraft.shared.TurtlePermissions;
|
||||
import dan200.computercraft.shared.command.CommandComputerCraft;
|
||||
import dan200.computercraft.shared.command.arguments.ArgumentSerializers;
|
||||
import dan200.computercraft.shared.common.DefaultBundledRedstoneProvider;
|
||||
import dan200.computercraft.shared.common.TileGeneric;
|
||||
import dan200.computercraft.shared.data.BlockNamedEntityLootCondition;
|
||||
import dan200.computercraft.shared.data.HasComputerIdLootCondition;
|
||||
import dan200.computercraft.shared.data.PlayerCreativeLootCondition;
|
||||
@ -28,6 +29,7 @@ import dan200.computercraft.shared.turtle.FurnaceRefuelHandler;
|
||||
import dan200.computercraft.shared.turtle.SignInspectHandler;
|
||||
import dan200.computercraft.shared.util.TickScheduler;
|
||||
|
||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerBlockEntityEvents;
|
||||
import net.minecraft.block.entity.BlockEntity;
|
||||
import net.minecraft.block.entity.CommandBlockBlockEntity;
|
||||
import net.minecraft.item.Item;
|
||||
@ -106,6 +108,12 @@ public final class ComputerCraftProxyCommon {
|
||||
ComputerCraftProxyCommon.server = null;
|
||||
});
|
||||
|
||||
ServerBlockEntityEvents.BLOCK_ENTITY_UNLOAD.register( ( blockEntity, world ) -> {
|
||||
if(blockEntity instanceof TileGeneric ) {
|
||||
((TileGeneric)blockEntity).onChunkUnloaded();
|
||||
}
|
||||
});
|
||||
|
||||
TurtleEvent.EVENT_BUS.register(FurnaceRefuelHandler.INSTANCE);
|
||||
TurtleEvent.EVENT_BUS.register(new TurtlePermissions());
|
||||
TurtleEvent.EVENT_BUS.register(new SignInspectHandler());
|
||||
|
@ -6,7 +6,7 @@ import java.util.Map;
|
||||
import com.google.common.eventbus.Subscribe;
|
||||
|
||||
import dan200.computercraft.api.turtle.event.TurtleBlockEvent;
|
||||
import dan200.computercraft.mixin.SignBlockEntityAccess;
|
||||
import dan200.computercraft.fabric.mixin.SignBlockEntityAccess;
|
||||
|
||||
import net.minecraft.block.entity.BlockEntity;
|
||||
import net.minecraft.block.entity.SignBlockEntity;
|
||||
|
@ -21,7 +21,7 @@ import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import dan200.computercraft.ComputerCraft;
|
||||
import dan200.computercraft.mixin.WorldSavePathAccess;
|
||||
import dan200.computercraft.fabric.mixin.WorldSavePathAccess;
|
||||
import me.shedaniel.cloth.api.utils.v1.GameInstanceUtils;
|
||||
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"required": true,
|
||||
"package": "dan200.computercraft.mixin",
|
||||
"package": "dan200.computercraft.fabric.mixin",
|
||||
"compatibilityLevel": "JAVA_8",
|
||||
"mixins": [
|
||||
"MinecraftServerAccess",
|
||||
@ -20,7 +20,7 @@
|
||||
"HeldItemRendererAccess",
|
||||
"MixinHeldItemRenderer",
|
||||
"MixinItemFrameEntityRenderer",
|
||||
"MixinMinecraftGame",
|
||||
"MixinMinecraftClient",
|
||||
"MixinScreen",
|
||||
"MixinWorldRenderer"
|
||||
],
|
||||
|
Loading…
x
Reference in New Issue
Block a user