Skip to content

Instantly share code, notes, and snippets.

@Ryan-Kirkpatrick
Created March 22, 2023 10:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Ryan-Kirkpatrick/9e02953ce1d611c952a5fc3caf77a9cf to your computer and use it in GitHub Desktop.
Save Ryan-Kirkpatrick/9e02953ce1d611c952a5fc3caf77a9cf to your computer and use it in GitHub Desktop.
package crashdive;
import org.spongepowered.api.plugin.Plugin;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.filter.cause.First;
import org.spongepowered.api.event.game.state.GameStartedServerEvent;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.text.Text;
import org.spongepowered.api.data.key.Keys;
import org.spongepowered.api.data.type.DyeColors;
import org.spongepowered.api.data.type.HandTypes;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.event.item.inventory.ClickInventoryEvent;
import org.spongepowered.api.event.item.inventory.InteractItemEvent;
import org.spongepowered.api.item.ItemTypes;
import org.spongepowered.api.item.inventory.Inventory;
import org.spongepowered.api.item.inventory.InventoryArchetypes;
import org.spongepowered.api.item.inventory.ItemStack;
import org.spongepowered.api.item.inventory.Slot;
import org.spongepowered.api.item.inventory.property.InventoryTitle;
import org.spongepowered.api.item.inventory.property.SlotPos;
import org.spongepowered.api.item.inventory.transaction.SlotTransaction;
import com.google.inject.Inject;
import java.util.Optional;
import org.slf4j.Logger;
@Plugin(id = "crashdive_recipe_plan_fix", name = "Recipe Plan Fix", version = "0.1.0", description = "Bypasses the need for a project bench to program a recipe plan")
public class RecipePlanFixPlugin {
@Inject
private Logger logger;
@Listener
public void onServerStart(GameStartedServerEvent event) {
logger.info("[RecipePlanFix] Started!");
}
public void callback(ClickInventoryEvent event) {
Sponge.getServer().getBroadcastChannel().send(Text.of("======[ Slot values ]======"));
Optional<Slot> slot = event.getSlot();
String msgString;
if (!slot.isPresent()) {
msgString = "No slot value";
} else {
Optional<SlotPos> pos = slot.get().getInventoryProperty(SlotPos.class);
if (!pos.isPresent()) {
msgString = "[event.getSlot()] No position value was given";
} else {
msgString = "[event.getSlot()] Slot position (x, y): (" + String.valueOf(pos.get().getX()) + ", " + String.valueOf(pos.get().getY()) + ")";
}
}
Sponge.getServer().getBroadcastChannel().send(Text.of(msgString));
}
@Listener
public void onRightClick(InteractItemEvent event, @First Player player) {
// Obtain item
Optional<ItemStack> item = player.getItemInHand(HandTypes.MAIN_HAND);
if (!item.isPresent()) {
return;
}
String id = item.get().getType().getId();
if (!id.equals("projectred-expansion:plan")) {
return;
}
// Create an inventory
Inventory craftingMenu = Inventory.builder()
.of(InventoryArchetypes.DOUBLE_CHEST)
.property(InventoryTitle.PROPERTY_NAME, InventoryTitle.of(Text.of("Configure Recipe Plan")))
.withCarrier(player)
.listener(ClickInventoryEvent.class, this::callback)
.build(this);
player.openInventory(craftingMenu);
// Fill chest with black glass panes
Iterable<Slot> slots = craftingMenu.slots();
for (Slot slot : slots) {
ItemStack stackToInsert = ItemStack.of(ItemTypes.STAINED_GLASS_PANE, 1);
stackToInsert.offer(Keys.DYE_COLOR, DyeColors.BLACK);
stackToInsert.offer(Keys.DISPLAY_NAME, Text.of(""));
slot.set(stackToInsert);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment