Skip to content

Commit

Permalink
Add option to not open GUI when placed (#199)
Browse files Browse the repository at this point in the history
* fabric: 1.19.4

* fabric: add option to not open GUI when placed

* fix: activate forge

* feat: use common code

* feat: forgot some parts

* feat: use mixingradle & openGuiOnPlace for forge
  • Loading branch information
Rakambda authored Mar 21, 2023
1 parent 92d379e commit 1c071a5
Show file tree
Hide file tree
Showing 30 changed files with 623 additions and 413 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,16 @@ public EditSignCommon(){
@NotNull
public abstract IComponent translate(@NotNull String key, Object... objects);

public boolean playerHasSignModifier(@NotNull IPlayer player, @NotNull IHand hand){
var playerItem = player.getHandItem(hand);

var isDye = playerItem.getItem().isDye();
var isGlowInkSack = playerItem.isGlowInk();
var isInkSack = playerItem.isInkSac();

return isDye || isGlowInkSack || isInkSack;
}

public boolean canPlayerEdit(@NotNull IPlayer player, @NotNull IHand hand){
var requiredItem = configuration.getRequiredItem(this);
if(!requiredItem.isEmpty()){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ public class Configuration{
@Expose
@Getter
public String requiredItemId = "";
@Expose
@Getter
public boolean openGuiOnPlace = true;

public Collection<IItem> getRequiredItem(@NotNull EditSignCommon mod){
return mod.getAsItems(getRequiredItemId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@

public interface IItem extends IWrapper{
boolean isAir();

boolean isDye();
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,8 @@
public interface IItemStack extends IWrapper{
@NotNull
IItem getItem();

boolean isGlowInk();

boolean isInkSac();
}
4 changes: 4 additions & 0 deletions common/src/main/resources/assets/editsign/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,9 @@
"text.autoconfig.editsign.option.requiredItemId.@Tooltip[1]": "to be holding in order to edit",
"text.autoconfig.editsign.option.requiredItemId.@Tooltip[2]": "a sign. If no value is set",
"text.autoconfig.editsign.option.requiredItemId.@Tooltip[3]": "any item will be fine.",
"text.autoconfig.editsign.option.openGuiOnPlace": "Open GUI on place",
"text.autoconfig.editsign.option.openGuiOnPlace.@Tooltip[0]": "If set to false, sign",
"text.autoconfig.editsign.option.openGuiOnPlace.@Tooltip[1]": "GUI won't be opened",
"text.autoconfig.editsign.option.openGuiOnPlace.@Tooltip[2]": "when first placed",
"editsign.action.not_editable": "This sign isn't editable"
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,16 @@ public void fillConfigScreen(@NotNull ConfigBuilder builder, @NotNull Configurat
.setSaveConsumer(config::setRequiredItemId)
.setErrorSupplier(map(getMinecraftItemIdCellError()))
.build();
var openGuiOnPlaceEntry = builder.entryBuilder()
.startBooleanToggle(translatable(getFieldName(null, "openGuiOnPlace")), config.isOpenGuiOnPlace())
.setDefaultValue(true)
.setTooltip(getTooltips(null, "openGuiOnPlace", 3))
.setSaveConsumer(config::setOpenGuiOnPlace)
.build();

var general = builder.getOrCreateCategory(translatable("text.autoconfig.editsign.category.default"));
general.addEntry(requiredItemEntry);
general.addEntry(openGuiOnPlaceEntry);
}

@NotNull
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import org.jetbrains.annotations.NotNull;

@RequiredArgsConstructor
Expand All @@ -18,4 +19,14 @@ public class ItemStackWrapper implements IItemStack{
public IItem getItem(){
return new ItemWrapper(raw.getItem());
}

@Override
public boolean isGlowInk(){
return raw.is(Items.GLOW_INK_SAC);
}

@Override
public boolean isInkSac(){
return raw.is(Items.INK_SAC);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import fr.rakambda.editsign.common.wrapper.IItem;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.minecraft.world.item.DyeItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;
import org.jetbrains.annotations.NotNull;
Expand All @@ -18,6 +19,11 @@ public boolean isAir(){
return Items.AIR.equals(raw);
}

@Override
public boolean isDye(){
return raw instanceof DyeItem;
}

@Override
public boolean equals(Object obj){
if(!(obj instanceof IItem item)){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
import fr.rakambda.editsign.fabric.common.wrapper.HandWrapper;
import fr.rakambda.editsign.fabric.common.wrapper.PlayerWrapper;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.item.DyeItem;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.entity.SignBlockEntity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
Expand All @@ -14,29 +12,25 @@
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin(SignBlockEntity.class)
public final class SignBlockEntityMixin{
public abstract class SignBlockEntityMixin{
@Shadow
private boolean isEditable;

@Inject(method = "executeClickCommands", at = @At("HEAD"))
@Inject(method = "executeClickCommands", at = @At("HEAD"), cancellable = true)
public void useOnBlock(ServerPlayer serverPlayer, CallbackInfoReturnable<Boolean> callback){
var itemStack = serverPlayer.getItemInHand(serverPlayer.getUsedItemHand());
var item = itemStack.getItem();

var isDye = item instanceof DyeItem;
var isGlowInkSack = itemStack.is(Items.GLOW_INK_SAC);
var isInkSack = itemStack.is(Items.INK_SAC);
var wrappedPlayer = new PlayerWrapper(serverPlayer);
var wrappedHand = new HandWrapper(serverPlayer.getUsedItemHand());

if(isDye || isGlowInkSack || isInkSack){
if(!EditSign.getMod().canPlayerEdit(wrappedPlayer, wrappedHand)){
return;
}

var wrappedPlayer = new PlayerWrapper(serverPlayer);
var wrappedHand = new HandWrapper(serverPlayer.getUsedItemHand());
if(EditSign.getMod().canPlayerEdit(wrappedPlayer, wrappedHand)){
isEditable = true;
SignBlockEntity sign = (SignBlockEntity) (Object) this;
serverPlayer.openTextEdit(sign);
if(EditSign.getMod().playerHasSignModifier(wrappedPlayer, wrappedHand)){
return;
}

isEditable = true;
SignBlockEntity sign = (SignBlockEntity) (Object) this;
serverPlayer.openTextEdit(sign);
callback.setReturnValue(true);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package fr.rakambda.editsign.fabric.mixin;

import fr.rakambda.editsign.fabric.EditSign;
import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.SignItem;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
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.CallbackInfoReturnable;

@Mixin(SignItem.class)
public abstract class SignItemMixin extends BlockItem{
public SignItemMixin(Block block, Properties properties){
super(block, properties);
}

@Inject(method = "updateCustomBlockEntityTag", at = @At(value = "HEAD"), cancellable = true)
public void updateCustomBlockEntityTag(BlockPos blockPos, Level level, Player player, ItemStack itemStack, BlockState blockState, CallbackInfoReturnable<Boolean> callback){
if(!EditSign.getMod().getConfiguration().isOpenGuiOnPlace()){
callback.setReturnValue(super.updateCustomBlockEntityTag(blockPos, level, player, itemStack, blockState));
}
}
}
3 changes: 2 additions & 1 deletion fabric/src/main/resources/editsign.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
"package": "fr.rakambda.editsign.fabric.mixin",
"compatibilityLevel": "JAVA_17",
"mixins": [
"SignBlockEntityMixin"
"SignBlockEntityMixin",
"SignItemMixin"
],
"client": [],
"server": [],
Expand Down
Loading

0 comments on commit 1c071a5

Please sign in to comment.