package com.wsseieiei.noise_redstone.guis;
import com.wsseieiei.noise_redstone.blocks.auto_bell.AutoBellBlock;
import com.wsseieiei.noise_redstone.blocks.auto_bell.AutoBellBlockEntity;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.client.gui.widget.ForgeSlider;
import org.jetbrains.annotations.NotNull;
import java.util.function.Supplier;
public class AutoBellGui extends Screen {
Level level;
BlockPos pos;
BlockState state;
ForgeSlider slider;
Button button;
public AutoBellGui(Level level,BlockPos pos) {
super(Component.empty());
this.level=level;
this.pos=pos;
this.state=level.getBlockState(pos);
}
@Override
protected void init(){
this.slider=new ForgeSlider(this.width/2-150,100,300,20,Component.nullToEmpty(""),Component.nullToEmpty("ticks"),0D,100D,state.getValue(AutoBellBlock.AutoBell.WAIT),true);
this.addRenderableWidget(this.slider);
this.button=new Button.Builder(Component.nullToEmpty("OK"), new Button.OnPress() {
@Override
public void onPress(@NotNull Button p_93751_) {
level.setBlock(pos,state.setValue(AutoBellBlock.AutoBell.WAIT,(int)slider.getValue()),3);
state=level.getBlockState(pos);
}
}).pos(this.width/2-29,200).size(58, 20).build();
this.addRenderableWidget(this.button);
}
@Override
public void render(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
this.state=level.getBlockState(pos);
this.renderBackground(graphics);
graphics.drawString(this.font, Component.translatable("block.noise_redstone.auto_bell"), 40, 30, 0xffffff, false);
graphics.renderFakeItem(new ItemStack(Items.BELL),20,26);
this.button.active=this.slider.getValue() != state.getValue(AutoBellBlock.AutoBell.WAIT);
super.render(graphics, mouseX, mouseY, partialTicks);
}
}
复制代码
这是我的代码,在第43行中修改了一个方块
level.setBlock(pos,state.setValue(AutoBellBlock.AutoBell.WAIT,(int)slider.getValue()),3);
复制代码
但是因为这行代码在GUI内,只在客户端执行了,请问如何将这行代码改为在服务端修改这个方块
import com.wsseieiei.noise_redstone.blocks.auto_bell.AutoBellBlock;
import com.wsseieiei.noise_redstone.blocks.auto_bell.AutoBellBlockEntity;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.client.gui.widget.ForgeSlider;
import org.jetbrains.annotations.NotNull;
import java.util.function.Supplier;
public class AutoBellGui extends Screen {
Level level;
BlockPos pos;
BlockState state;
ForgeSlider slider;
Button button;
public AutoBellGui(Level level,BlockPos pos) {
super(Component.empty());
this.level=level;
this.pos=pos;
this.state=level.getBlockState(pos);
}
@Override
protected void init(){
this.slider=new ForgeSlider(this.width/2-150,100,300,20,Component.nullToEmpty(""),Component.nullToEmpty("ticks"),0D,100D,state.getValue(AutoBellBlock.AutoBell.WAIT),true);
this.addRenderableWidget(this.slider);
this.button=new Button.Builder(Component.nullToEmpty("OK"), new Button.OnPress() {
@Override
public void onPress(@NotNull Button p_93751_) {
level.setBlock(pos,state.setValue(AutoBellBlock.AutoBell.WAIT,(int)slider.getValue()),3);
state=level.getBlockState(pos);
}
}).pos(this.width/2-29,200).size(58, 20).build();
this.addRenderableWidget(this.button);
}
@Override
public void render(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
this.state=level.getBlockState(pos);
this.renderBackground(graphics);
graphics.drawString(this.font, Component.translatable("block.noise_redstone.auto_bell"), 40, 30, 0xffffff, false);
graphics.renderFakeItem(new ItemStack(Items.BELL),20,26);
this.button.active=this.slider.getValue() != state.getValue(AutoBellBlock.AutoBell.WAIT);
super.render(graphics, mouseX, mouseY, partialTicks);
}
}
复制代码
这是我的代码,在第43行中修改了一个方块
level.setBlock(pos,state.setValue(AutoBellBlock.AutoBell.WAIT,(int)slider.getValue()),3);
复制代码
但是因为这行代码在GUI内,只在客户端执行了,请问如何将这行代码改为在服务端修改这个方块