Skip to content

Commit

Permalink
Now using direct progwidget copy, no more write/read to NBT
Browse files Browse the repository at this point in the history
Fixed equals/hashCode for ProgWidgetArea
  • Loading branch information
desht committed Jul 23, 2024
1 parent 88ed972 commit 3ae08c2
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 67 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@

package me.desht.pneumaticcraft.api.drone;

import net.minecraft.core.HolderLookup;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.ai.goal.Goal;
Expand All @@ -26,7 +25,6 @@

import javax.annotation.Nonnull;
import java.util.List;
import java.util.Optional;

public interface IProgWidget {
int getX();
Expand Down Expand Up @@ -156,8 +154,6 @@ default String getTranslationKey() {
*/
boolean isAvailable();

Optional<? extends IProgWidget> copy(HolderLookup.Provider provider);

IProgWidget copyWidget();

boolean canBeRunByComputers(IDrone drone, IProgWidget widget);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -587,7 +587,7 @@ public boolean keyReleased(int keyCode, int scanCode, int modifiers) {
// } else if (filterField.isFocused() && keyCode != GLFW.GLFW_KEY_TAB) {
// return filterField.keyReleased(keyCode, scanCode, modifiers);
// } else {
return super.keyReleased(keyCode, scanCode, modifiers);
return super.keyReleased(keyCode, scanCode, modifiers);
// }
}

Expand Down Expand Up @@ -799,32 +799,29 @@ private void setConnectingWidgetsToXY(IProgWidget widget, int x, int y) {
}

/**
* Called when shift + middle-clicking: copy this widget and all connecting widgets to the side or below (but not
* above).
* Called when shift + middle-clicking: copy this widget and all connecting widgets to the side and/or below
* (but not above).
* @param original original widget being copied
* @param copy new copy of the widget
*/
private void copyAndConnectConnectingWidgets(IProgWidget original, IProgWidget copy) {
IProgWidget[] connectingWidgets = original.getConnectedParameters();
if (connectingWidgets != null) {
for (int i = 0; i < connectingWidgets.length; i++) {
if (connectingWidgets[i] != null) {
Optional<? extends IProgWidget> c = connectingWidgets[i].copy(registryAccess());
if (c.isPresent()) {
te.progWidgets.add(c.get());
copy.setParameter(i, c.get());
copyAndConnectConnectingWidgets(connectingWidgets[i], c.get());
}
private void copyWidgetRecursively(IProgWidget original, IProgWidget copy) {
IProgWidget[] connectedWidgets = original.getConnectedParameters();
if (connectedWidgets != null) {
for (int i = 0; i < connectedWidgets.length; i++) {
if (connectedWidgets[i] != null) {
IProgWidget connectedCopy = connectedWidgets[i].copyWidget();
te.progWidgets.add(connectedCopy);
copy.setParameter(i, connectedCopy);
copyWidgetRecursively(connectedWidgets[i], connectedCopy);
}
}
}
IProgWidget outputWidget = original.getOutputWidget();
if (outputWidget != null) {
outputWidget.copy(registryAccess()).ifPresent(c -> {
te.progWidgets.add(c);
copy.setOutputWidget(c);
copyAndConnectConnectingWidgets(outputWidget, c);
});
IProgWidget outputCopy = outputWidget.copyWidget();
te.progWidgets.add(outputCopy);
copy.setOutputWidget(outputCopy);
copyWidgetRecursively(outputWidget, outputCopy);
}
}

Expand Down Expand Up @@ -1149,15 +1146,13 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) {
if (showingWidgetProgress == 0) {
IProgWidget widget = programmerUnit.getHoveredWidget((int) mouseX, (int) mouseY);
if (widget != null) {
widget.copy(registryAccess()).ifPresent(copy -> {
draggingWidget = copy;
te.progWidgets.add(draggingWidget);
dragMouseStartX = trMouseX - leftPos;
dragMouseStartY = trMouseY - topPos;
dragWidgetStartX = widget.getX();
dragWidgetStartY = widget.getY();
if (Screen.hasShiftDown()) copyAndConnectConnectingWidgets(widget, draggingWidget);
});
draggingWidget = widget.copyWidget();
te.progWidgets.add(draggingWidget);
dragMouseStartX = trMouseX - leftPos;
dragMouseStartY = trMouseY - topPos;
dragWidgetStartX = widget.getX();
dragWidgetStartY = widget.getY();
if (Screen.hasShiftDown()) copyWidgetRecursively(widget, draggingWidget);
return true;
}
} else {
Expand Down Expand Up @@ -1267,14 +1262,12 @@ private boolean mouseClickedEmpty(double mouseX, double mouseY, double origX, do
&& origX <= widget.getX() + leftPos + widget.getWidth() / 2f
&& origY <= widget.getY() + topPos + widget.getHeight() / 2f)
{
widget.copy(registryAccess()).ifPresent(c -> {
draggingWidget = c;
te.progWidgets.add(draggingWidget);
dragMouseStartX = mouseX - (int) (leftPos / scale);
dragMouseStartY = mouseY - (int) (topPos / scale);
dragWidgetStartX = (int) ((widget.getX() - programmerUnit.getTranslatedX()) / scale);
dragWidgetStartY = (int) ((widget.getY() - programmerUnit.getTranslatedY()) / scale);
});
draggingWidget = widget.copyWidget();
te.progWidgets.add(draggingWidget);
dragMouseStartX = mouseX - (int) (leftPos / scale);
dragMouseStartY = mouseY - (int) (topPos / scale);
dragWidgetStartX = (int) ((widget.getX() - programmerUnit.getTranslatedX()) / scale);
dragWidgetStartY = (int) ((widget.getY() - programmerUnit.getTranslatedY()) / scale);
return true;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,12 @@
import me.desht.pneumaticcraft.common.config.subconfig.ProgWidgetConfig;
import net.minecraft.ChatFormatting;
import net.minecraft.Util;
import net.minecraft.core.HolderLookup;
import net.minecraft.nbt.NbtOps;
import net.minecraft.nbt.Tag;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.resources.RegistryOps;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.ai.goal.Goal;
import org.apache.commons.lang3.tuple.ImmutablePair;
Expand Down Expand Up @@ -266,18 +262,6 @@ public IProgWidget getOutputWidget(IDrone drone, List<IProgWidget> allWidgets) {
return outputStepConnection;
}

@Override
public Optional<? extends IProgWidget> copy(HolderLookup.Provider provider) {
try {
RegistryOps<Tag> ops = provider.createSerializationContext(NbtOps.INSTANCE);
Tag tag = CODEC.encodeStart(ops, this).getOrThrow();
var copy = CODEC.parse(ops, tag).getOrThrow();
return copy instanceof IProgWidget p ? Optional.of(p) : Optional.empty();
} catch (IllegalStateException e) {
return Optional.empty();
}
}

static <T extends IProgWidget> List<T> getConnectedWidgetList(IProgWidget widget, int parameterIndex, ProgWidgetType<T> type) {
validateType(widget, parameterIndex, type);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -411,12 +411,12 @@ public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ProgWidgetArea that = (ProgWidgetArea) o;
return Objects.deepEquals(pos, that.pos) && Objects.deepEquals(varNames, that.varNames) && Objects.equals(areaType, that.areaType);
return Objects.equals(getPosition(), that.getPosition()) && Objects.deepEquals(pos, that.pos) && Objects.deepEquals(varNames, that.varNames) && Objects.equals(areaType, that.areaType);
}

@Override
public int hashCode() {
return Objects.hash(Arrays.hashCode(pos), Arrays.hashCode(varNames), areaType);
return Objects.hash(getPosition(), Arrays.hashCode(pos), Arrays.hashCode(varNames), areaType);
}

public Immutable toImmutable() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
import me.desht.pneumaticcraft.common.drone.ai.DroneAICustomBlockInteract;
import me.desht.pneumaticcraft.common.registry.ModProgWidgetTypes;
import net.minecraft.Util;
import net.minecraft.core.HolderLookup;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.resources.ResourceLocation;
Expand All @@ -37,7 +36,6 @@

import java.util.List;
import java.util.Objects;
import java.util.Optional;

import static me.desht.pneumaticcraft.api.PneumaticRegistry.RL;

Expand Down Expand Up @@ -80,13 +78,6 @@ public ProgWidgetType<?> getType() {
return customType;
}

@Override
public Optional<? extends IProgWidget> copy(HolderLookup.Provider provider) {
return super.copy(provider)
.filter(w -> w instanceof ProgWidgetCustomBlockInteract)
.map(w -> ((ProgWidgetCustomBlockInteract) w).setInteractor(interactor));
}

@Override
public ResourceLocation getTexture() {
return interactor.getTexture();
Expand Down

0 comments on commit 3ae08c2

Please sign in to comment.