From e515e9cc66d627c543e3e50d8983ffdb38936703 Mon Sep 17 00:00:00 2001
From: Seth Alves <seth.alves@gmail.com>
Date: Mon, 11 Mar 2019 12:38:54 -0700
Subject: [PATCH] fix cloneEntity function

---
 scripts/system/libraries/cloneEntityUtils.js      | 15 ++++++---------
 .../system/libraries/controllerDispatcherUtils.js |  4 +++-
 2 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/scripts/system/libraries/cloneEntityUtils.js b/scripts/system/libraries/cloneEntityUtils.js
index e0f4aba84a..f789e19cd8 100644
--- a/scripts/system/libraries/cloneEntityUtils.js
+++ b/scripts/system/libraries/cloneEntityUtils.js
@@ -5,8 +5,8 @@
 //  Distributed under the Apache License, Version 2.0.
 //  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
 
-/* global entityIsCloneable:true, getGrabbableData:true, cloneEntity:true, propsAreCloneDynamic:true, Script,
-   propsAreCloneDynamic:true, Entities*/
+/* global entityIsCloneable:true, cloneEntity:true, propsAreCloneDynamic:true, Script,
+   propsAreCloneDynamic:true, Entities, Uuid */
 
 Script.include("/~/system/libraries/controllerDispatcherUtils.js");
 
@@ -47,13 +47,10 @@ propsAreCloneDynamic = function(props) {
 };
 
 cloneEntity = function(props) {
-    var entityToClone = props.id;
-    var props = Entities.getEntityProperties(entityToClone, ['certificateID', 'certificateType'])
-    var certificateID = props.certificateID;
-    // ensure entity is cloneable and does not have a certificate ID, whereas cloneable limits
-    // will now be handled by the server where the entity add will fail if limit reached
-    if (entityIsCloneable(props) && (!!certificateID || props.certificateType.indexOf('domainUnlimited') >= 0)) {
-        var cloneID = Entities.cloneEntity(entityToClone);
+    var entityIDToClone = props.id;
+    if (entityIsCloneable(props) &&
+        (Uuid.isNull(props.certificateID) || props.certificateType.indexOf('domainUnlimited') >= 0)) {
+        var cloneID = Entities.cloneEntity(entityIDToClone);
         return cloneID;
     }
     return null;
diff --git a/scripts/system/libraries/controllerDispatcherUtils.js b/scripts/system/libraries/controllerDispatcherUtils.js
index 385ed954b0..5cb95f625d 100644
--- a/scripts/system/libraries/controllerDispatcherUtils.js
+++ b/scripts/system/libraries/controllerDispatcherUtils.js
@@ -156,7 +156,9 @@ DISPATCHER_PROPERTIES = [
     "grab.equippableIndicatorOffset",
     "userData",
     "avatarEntity",
-    "owningAvatarID"
+    "owningAvatarID",
+    "certificateID",
+    "certificateType"
 ];
 
 // priority -- a lower priority means the module will be asked sooner than one with a higher priority in a given update step